- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如果这是一个非常幼稚的问题,我们深表歉意。前段时间我使用 .Net 4.5 编写了一个 Windows 窗体应用程序。最近,我认为使用 VS Code 将其移植到 .Net Standard 2.0 应用程序是个好主意。
缺少库和类存在一些问题(System.ServiceModel 是最大的差距),但我已经到了成功构建应用程序的地步。但是,当我运行它时,我看到以下错误:
Unhandled Exception: System.BadImageFormatException: Could not load file or assembly 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058) ---> System.BadImageFormatException: Cannot load a reference assembly for execution.
如果有用的话,这里是项目文件:
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="log4net" Version="2.0.8" />
<PackageReference Include="Microsoft.CSharp" Version="4.4.0" />
<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
<PackageReference Include="NUnit" Version="3.8.1" />
<PackageReference Include="System.CodeDom" Version="4.4.0" />
<PackageReference Include="System.Configuration" Version="2.0.5" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="4.4.0" />
<PackageReference Include="System.Net.Http" Version="4.3.3" />
<PackageReference Include="System.ServiceModel" Version="1.0.0" />
<PackageReference Include="System.ServiceModel.Security" Version="4.4.0" />
<PackageReference Include="System.Windows.Forms" Version="4.0.0.0" />
</ItemGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
</Project>
有没有什么方法可以使用 System.Windows.Forms 库运行应用程序,或者我应该用 .Net Standard 2.0 的不同库替换它?
最佳答案
您无法构建面向 .NET Standard 2.0 的应用程序。只有库可以面向 .NET Standard。应用程序仍然必须针对特定的运行时 - .NET Framework、.NET Core、Xamarin 等。
根据您的项目文件判断,您实际上是针对 .NET Core 2.0。
System.Windows.Forms
是 .NET Framework(和 Mono)的一部分。它不作为 .NET Standard 或 .NET Core 的一部分存在。
您的项目文件有一个 PackageReference
到 System.Windows.Forms
,它将引入 this。 NuGet 包。它是非官方的和未列出的。它的描述是“不受支持的库”。
该包内的 DLL 只是一个引用程序集,即没有任何方法包含任何实际代码。该程序集仅包含定义。
这就是错误消息“不应为执行加载引用程序集”的含义。该包中的程序集可让您进行编译,但除此之外别无他法。
没有正式的方法可以在 .NET Core(3.0 之前)上运行 Windows 窗体应用程序。将您的业务逻辑拉入 .NET Standard 程序集可能会有好处,但您的用户界面仍必须是 .NET Framework 应用程序。
关于c# - 将 Windows 窗体移植到 .Net Standard 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47127222/
对于一个科学实验,我写了一个turtle.py ,它会打开一个 800x480 的窗口并绘制一个缓慢增长的黑点。 turtle.py以 C:\Users\kaza>python C:\Users\ka
我开发了一个 swing 应用程序,但每次运行应用程序时都会打开一个新窗口。我希望如果一个窗口已经打开,则其他窗口不允许打开。 最佳答案 Here是一个 Java 单一应用实例的例子: A singl
有没有办法检测主进程中 Electron 的结构? process.platform 似乎也在 x64 机器上返回 win32,我没有在文档中找到任何获取架构的选项。 最佳答案 你试过 process
public short[] HanningWindow(short[] signal_in ,int pos ,int size) { for (int i= pos; i < pos+si
我有一个具有这些属性的 Electron 窗口: mainWindow = new BrowserWindow({ width: 800, height: 600, title: "Aqu
我有一个 Ubuntu 工作站,我正在尝试引导一个 Windows 节点。 Windows 节点在端口 2222 上打开了 ssh。我一直在关注 http://docs.opscode.com/plu
我是一名优秀的程序员,十分优秀!