mscorlib.dll中的BadImageFormatException。该模块应该包含一个程序集清单

时间:2017-09-06 11:14:41

标签: c# c++ dll c++-cli

我试图从C ++程序中调用一些第三方c#dll。在独立的c#程序中,一切正常,无一例外。 运行C ++ / CLI时,我收到异常“mscorlib.dll中的BadImageFormatException”无法加载文件或程序集“MyTestAppCpp.exe”或其依赖项之一。该模块应该包含一个程序集清单。

对于使用c ++绑定c#,我在C ++ / CLI中使用c ++包装器。 C ++程序,cpp包装器和c#dll中的所有设置都是32位。在ProcessExplorer中,我的应用程序的图像类型是31位。 Wow64.dll,wow64cpu.dll,wow64win.dll和nt.dll是64位。这会导致问题吗? 关于BadImageFormatException的几乎所有帖子中的答案都是某些设置为false且x86和x64混合在一起。所有设置似乎都是正确的。不知怎的,我找不到任何合适的帖子如何解决问题。在这种情况下应该在清单文件中放置什么以及如何为c ++创建它? 任何其他想法如何解决问题? 仅在附加的调试器中显示异常消息。在没有调试器的情况下运行应用程序时,不会显示任除了例外,应用似乎工作正常。

我正在使用Win 8.1,visual studio 2015。

修改 感谢Hans Passant的回答,我开始使用Fuslogvw。首先,有一份报告称无法找到Serialization.dll(第三方提供商,而不是microsoft .net one)。将此和所有其他dll复制到/ debug目录后,我收到以下错误:

LOG: Assembly download was successful. Attempting setup of file: F:\Projects\MyTestAppCpp\Debug\MyTestAppCpp.exe.
LOG: Entering download cache setup phase.
ERR: Error extracting manifest import from file (hr = 0x80131018).
ERR: Setup failed with hr = 0x80131018.
ERR: Failed to complete setup of assembly (hr = 0x80131018). Probing terminated.

我已经阅读了一篇关于相同问题的帖子(不幸的是我再也找不到了)c ++应用程序因为格式不同而无法从.net dll加载清单。可以这样吗?

我的另一个想法是,它可能与.net for XMLSerialzer中的FileNotFound异常类似,就像在这篇文章中XmlSerializer giving FileNotFoundException at constructor

当忽略异常并在VS中的模块窗口中继续调试时,我可以看到,所有dll都已正确加载。该应用程序似乎工作正常。在这种情况下,我可以忽略BadImageFormatException吗?

0 个答案:

没有答案