【发布时间】:2017-11-05 22:16:11
【问题描述】:
抱歉,如果这是一个非常幼稚的问题。前段时间,我使用 .Net 4.5 编写了一个 Windows 窗体应用程序。最近,我认为使用 VS Code 将其移植到 .Net Standard 2.0 应用程序是一个好主意。
缺少库和类存在一些问题(System.ServiceModel 是最大的差距),但我已经到了成功构建应用程序的地步。但是,当我运行它时,我看到以下错误:
未处理的异常:System.BadImageFormatException:无法加载文件或程序集“System.Windows.Forms,版本=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”。不应加载引用程序集以供执行。它们只能在 Reflection-only loader 上下文中加载。 (来自 HRESULT 的异常:0x80131058)---> System.BadImageFormatException:无法加载要执行的参考程序集。
如果有用的话,这里是项目文件:
<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 的不同库替换它?
【问题讨论】:
-
“最近,我认为使用 VS Code 将其移植到 .Net Standard 2.0 应用程序是一个好主意。”只有当 Linux 和 Mac 完全支持 Windows 窗体时,这才是一个好主意。也就是说,可能永远不会,当然也不会很快。 .NET Framework 不会消失。仍然高度受 Windows 限制的应用程序应该继续使用它。如果您为了移植而移植,请不要。如果您移植是因为您真的希望它在其他地方运行,请查看 Mono。
-
Winforms 在 .net 核心中不可用(主要目的是跨平台 .net 开发),而且很可能永远不会(至少在不久的将来不会)。
-
顺便说一句,将与 Forms 没有任何依赖关系的代码重构为 .NET Standard 库是值得的。这最大限度地提高了此类代码的可重用性。不会在其他地方使用的标准应用程序代码不会从中受益(除非您确实需要在其他平台上运行它)。
-
@Evk:Never say never again。 :-)
-
@Heinzi 主要。 Net core 点是跨平台支持,.net core 3 上的 WinForms 只能在 windows 上运行,所以对我来说似乎没有太大的改进。
标签: c# .net winforms .net-standard-2.0