Windows.Forms程序集问题C#(.NET Core 3.1)



经过10多个小时的研究,我允许自己在这个论坛上发布我的问题,但没有任何解决方案。基本上,我正在用以下目标框架编写我的第二个C#应用程序(仅限命令行(:.NET Core 3.1

问题是在使用Sytem.Windows.Forms程序集中的OpenFileDialog时。这是代码,但不是代码问题。

var filePath = string.Empty;
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
do
{
Console.Write(" Upload: n");
Thread.Sleep(500);
openFileDialog.Title = "Upload";
openFileDialog.DefaultExt = "txt";
openFileDialog.Filter = "Text files|*.txt";
openFileDialog.RestoreDirectory = true;
openFileDialog.ShowDialog();
filePath = openFileDialog.FileName;
} while (!File.Exists(filePath));
}
myList= new List<string>(File.ReadAllLines(filePath));
LoadList(filePath);

当在"0"中运行代码时;调试模式";它运行良好(Microsoft Visual Studio(。但是当使用";dotnet恢复"dotnet运行";在Visual Studio代码上,然后使用.exe,它告诉我:

命名空间"System.Windows'"中不存在"Form"。

现在,当我手动添加引用windows.Forms.dll(不必在以前的项目中使用openFileDialog来执行相同的功能(时,它告诉我:

对象引用未设置为对象的实例。

所以我真的很困惑。现在,我决定回到我以前的项目,看看它是如何使用"Windows.Forms"的,而我从未手动执行过这些功能。我看到它使用了一条不同的路径:;C: \Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\3.1.0\Ref\netcoreapp3.1\System.Windows.Forms.dll"。所以我确信,两者都有相同的目标框架,所以它应该起作用,但事实并非如此。它告诉我:

System.BadImageFormatException:无法加载文件或程序集

有人知道吗?

任何帮助都将不胜感激。

有一个技巧-当你想使用Windows窗体时,你必须在dotnetcore3.1的项目文件中启用它们。以下是它对我的工作方式:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>Exe</OutputType>
<UseWindowsForms>true</UseWindowsForms>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
</Project>

最新更新