【问题标题】:C++/CLI targetting .NET Core 3.1面向 .NET Core 3.1 的 C++/CLI
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-26
      • 2020-01-24
      • 2020-07-09
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多