繁体   English   中英

将 Windows 窗体移植到 .Net Standard 2.0

[英]Porting Windows Forms to .Net Standard 2.0

如果这是一个非常幼稚的问题,请道歉。 前段时间我使用 .Net 4.5 编写了一个 Windows 窗体应用程序。 最近,我认为使用 VS Code 将其移植到 .Net Standard 2.0 应用程序是个好主意。

缺少库和类存在一些问题(System.ServiceModel 是最大的差距),但我已经到了成功构建应用程序的地步。 但是,当我运行它时,我看到以下错误:

未处理的异常:System.BadImageFormatException:无法加载文件或程序集“System.Windows.Forms,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”。 不应为执行加载引用程序集。 它们只能在仅反射加载器上下文中加载。 (来自 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 的不同库替换它?

您无法构建面向 .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 的一部分存在。

你的项目文件有一个对 System.Windows.Forms 的PackageReference ,它将拉入这个NuGet 包。 这是非官方的和未上市的。 它的描述是“不受支持的库”。

该包内的 DLL 只是一个引用程序集,即没有任何方法包含任何实际代码。 该程序集仅包含定义。

这就是错误消息“不应加载参考程序集以供执行”的含义。 该包中的程序集可以让您编译,但没有其他功能。

没有在 .NET Core(3.0 之前)上运行 Windows 窗体应用程序的正式方法。 将您的业务逻辑拉入 .NET Standard 程序集可能会有好处,但您的用户界面仍必须是 .NET Framework 应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM