【发布时间】:2020-01-13 07:11:21
【问题描述】:
.NET Core 3.1 添加了对 C++/CLI (Announcing .NET Core 3.1) 的支持。官方公告列出了两个新的项目模板,CLR Class Library (.NET Core)和CLR Empty Project (.NET Core),我们确实可以找到并使用。
但是,没有关于 WPF 或 Windows 窗体等支持技术的其他信息。在a blog posts in September,微软表示:
我们致力于支持 .NET Core 的 C++/CLI 以实现轻松 C++ 代码库和 .NET 技术(如 WPF 和 Windows 窗体。当 .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.BadImageFormatException:无法加载 文件或程序集 'System.Windows.Forms, Version=4.0.0.0, 文化=中性,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 运行时的位置。
这应该有效,但我做的不对吗?
【问题讨论】:
-
我在使用自己的 C++/CLI dll 并针对 .NET Core 3.1 时遇到了相关问题,我发现了许多问题。为其中一个提交了错误报告。我能够离开以 .NET Framework 4.8 为目标的 C++/CLI,并且只让我的客户端 C# 应用程序以 .NET Core 3.1 为目标,但后来我开始遇到异常,就像你得到的一样,甚至在 DEBUG 构建中更奇怪。我怀疑 MS 有一些工作要做。
标签: c++ winforms .net-core c++-cli visual-studio-2019