提问者:小点点

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


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

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

我们致力于支持C++/CLI for.NET Core,以实现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核心的C++/CLI项目必须是DLL:

错误NETSDK1116:面向。NET核心得C++/CLI项目必须是动态库。

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

未处理的异常。System.BadImageFormatException:无法加载文件或程序集“System.Windows.Forms,Version=4.0.0.0,Culture=Neutral,PublicKeyToken=B77A5C561934E089"。试图加载格式不正确的程序。文件名:'System.Windows.Forms,Version=4.0.0.0,Culture=Neutral,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运行时的位置。

这是不是真的管用而我却做错了什么?


共2个答案

匿名用户

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

匿名用户

我在微软的网站上找到了这份文件。它解释了如何实现该操作,并附带了一个github repo,您可以轻松地自己克隆和试用:https://devblogs.microsoft.com/cppblog/porting-a-c-cli-project-to-net-core/

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(面向|net|core|3.1|c++|cli)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?