我正在尝试使用Assembly.Load
加载文件,但是出现BadImageException,但是如果我尝试使用Assembly.LoadFrom
加载完全相同的程序集,则可以正常工作。
// this works.
var asm1 = Assembly.LoadFrom(path);
// this throws an exception
var ba = File.ReadAllBytes(path);
var asm2 = Assembly.Load(ba);
从上面的代码中可以看到,程序集是完全相同的,但是它适用于Assembly.LoadFrom
而不是Assembly.Load
可能是什么原因?我如何让Assembly.Load
工作?
答案 0 :(得分:3)
Assmebly.Load
在思考C ++可执行文件时可能会抛出BadImageException
,这与Assembly.LoadFrom(string)
不同。
为了解决该问题,您必须在链接时使用/fixed:no
。
这是Msdn的段落:
反映C ++可执行文件可能会引发 BadImageFormatException。这很可能是由C ++引起的 编译器从中剥离重定位地址或.reloc节 您的可执行文件。为您的C ++保留.reloc地址 可执行文件,在链接时指定/ fixed:no。