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

我很高兴看到.NET Core 3.1和Visual Studio 2019 add support for managed C++/CLI projects的最新预览,因为这样的项目是在.NET Framework上保留特定项目的唯一想法。

因此,我安装了Visual Studio Preview 16.4.0 Preview 4,以及“对v142的C ++ / CLI支持...”选项,并且按预期的方式,我看到了新的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,PublicKeyToken=null'
   at TestApp.Program.Main(String[] args)

这两个托管程序集和测试应用程序目标都是X64。有任何想法可能是什么问题吗?

liufei2233 回答:在.NET Core 3.1中运行托管C ++ / CLI程序集时图像格式错误

Microsoft的某人在Github repo上提供了解决方案。

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

ijwhost.dll与应用程序放在同一文件夹中后,它可以按预期工作。

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

希望以后会使用更好的错误消息!

,

我使用 .net 5.0 作为 CLI 运行时。我终于发现我的问题是缺少原生依赖 DLL。

对于本机应用程序,会出现错误提示,告诉您缺少哪个 DLL。而在 .net core C++/CLI 中,它们只会给你一个 BadImageFormatException。

我的解决方案是,创建一个纯原生控制台项目,粘贴将导致 BadImageFormatException 的代码,运行它并查看缺少哪个 DLL,然后将其添加回 C++/CLI 项目文件列表。

我刚刚发现了一些意外的依赖项。

,

就我而言,c# Net 5.0 应用程序加载托管 C++ dll,它环绕非托管 C++ dll。每次尝试在未安装 Visual Studio 的机器上运行时,我都会收到此错误。我用 ProcessMonitor 调试它,发现它找不到 VCRUNTIME140D.dll。在我的开发 PC 中找到这些 dll,将它们(32 位和 64 位版本)从我的开发机器复制到客户的相应文件夹中,然后就成功了。希望会帮助某人。干杯。

本文链接:https://www.f2er.com/3138494.html

大家都在问