C++/CLI targetting .NET Core 3.1

C++/CLI targetting .NET Core 3.1

本文关键字:Core NET targetting CLI C++      更新时间:2023-10-16

.NET Core 3.1增加了对C++/CLI的支持(宣布.NET Core 3.1(。官方公告列出了两个新的项目模板,CLR 类库(.NET Core(和CLR Empty Project(.NET Core(,我们确实可以找到和使用它们。

但是,没有有关支持技术(如 WPF 或 Windows 窗体(的其他信息。在九月份的一篇博客文章中,Microsoft说:

我们致力于支持.NET Core的C++/CLI,以实现轻松 C++代码库与 .NET 技术(如 WPF 和 窗口窗体。当 .NET Core 3.0 时,此支持不会准备就绪 首次发布,但它将在 .NET Core 3.1 中提供,该版本随附 与Visual Studio 2019 16.4

使用Visual Studio 2019 16.4.x并面向.NET Core 3.1,我尝试使用C++/CLI创建一个演示WinForms应用程序。但是,它不起作用。

首先,面向 .NET Core 的 C++/CLI 项目必须是 DLL:

错误 NETSDK1116:面向 .NET Core 的C++/CLI 项目必须是动态的 图书馆。

因此,我尝试将 Win Forms 代码保存在使用/clr:netcore编译的 C++/CLI DLL 中,并从本机应用程序运行它。但是,我收到运行时异常:

未处理的异常。系统错误图像格式异常:无法加载 文件或程序集 'System.Windows.Forms, 版本=4.0.0.0, 区域性=中性,公钥令牌=b77a5c561934e089'。进行了尝试 加载格式不正确的程序。文件名: 'System.Windows.Forms, version=4.0.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089' ---> System.BadImageFormatException: 尝试加载格式不正确的程序。 (0x8007000B(

我在 C++/CLI 项目中引用了System.Windows.Forms.dll来自 c:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\3.1.0\,这是Microsoft.WindowsDesktop.App 3.1.0运行时的位置。

这应该有效,而我没有做正确的事情吗?

我在使用 C++/CLI(托管C++(.Net Core DLL 的 .NET Core C# 可执行文件的简单示例时遇到了类似的问题。最终发现我需要将我的 C# 可执行目标从任何 CPU显式设置为x64。大多数情况下,它归结为32位/64位不匹配。

我在微软的网站上找到了这个文档。 它解释了如何做到这一点,并附有一个 github 存储库,您可以轻松克隆并自己试用: https://devblogs.microsoft.com/cppblog/porting-a-c-cli-project-to-net-core/