在 .NET Core 3.1 中运行托管 C++/CLI 程序集时出现错误的图像格式

Coc*_*lla 6 .net c++ managed-c++ .net-core .net-core-3.0

我非常兴奋地看到 .NET Core 3.1 和 Visual Studio 2019 的最新预览版增加了对托管 C++/CLI 项目的支持,因为这样的项目是在 .NET Framework 上保留特定项目的唯一想法。

因此,我安装了 Visual Studio Preview 16.4.0 Preview 4 以及“C++/CLI support for v142...”选项,正如预期的那样,我看到了新的 C++ CLR 模板并安装了 .NET Core 3.1 preview 2

我使用“CLR 类库(.NET Core)”模板创建了一个新项目,将文件复制到一个旧的托管 C++/CLI 项目中,稍作调整,并构建了程序集 - 太棒了!

但是,当我尝试在 .NET Core 3.1 中使用该程序集时,出现了以下致命异常:

Unhandled exception. System.BadImageFormatException: Could not load file or assembly 'MyAssembly, Version=2019.0.1.0, Culture=neutral, PublicKeyToken=null'. An attempt was made to load a program with an incorrect format.
File name: 'MyAssembly, Version=2019.0.1.0, Culture=neutral, PublicKeyToken=null'
   at TestApp.Program.Main(String[] args)
Run Code Online (Sandbox Code Playgroud)

托管程序集和测试应用程序均以 X64 为目标。任何想法可能是什么问题?

Coc*_*lla 7

Microsoft 的某个人在Github 存储库上提供了解决方案。

构建托管 C++/CLI 项目时,一个文件ijwhost.dll将放置在程序集旁边的输出文件夹中 - 该文件需要与使用程序集的应用程序一起部署。

放入ijwhost.dll与应用程序相同的文件夹后,它按预期工作。

顺便说一句,我针对 .NET Core 3.1 预览版构建的旧 C++/CLI 项目实际上非常复杂 - 我非常惊喜地发现它基本上“正常工作”!

希望将来会使用更好的错误消息!