面向 .NET Core 3.1 的 C++/CLI

Mar*_*ila 6 c++ c++-cli winforms .net-core visual-studio-2019

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

但是,没有关于支持技术(如 WPF 或 Windows 窗体)的其他信息。在9 月份的一篇博文中,微软表示:

我们致力于为 .NET Core 支持 C++/CLI,以实现 C++ 代码库与 .NET 技术(如 WPF 和 Windows 窗体)之间的轻松互操作。这种支持不会在 .NET Core 3.0 首次发布时准备就绪,但它将在随 Visual Studio 2019 16.4 一起发布的 .NET Core 3.1 中提供

使用 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.BadImageFormatException:无法加载文件或程序集“System.Windows.Forms,版本=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”。试图加载格式不正确的程序。文件名:'System.Windows.Forms,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089'---> System.BadImageFormatException:试图加载格式不正确的程序。(0x8007000B)

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

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

Slo*_*vic 1

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