[我试图使用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
工作?
Assmebly.Load
可能会在思考C ++可执行文件时抛出Assmebly.Load
,与BadImageException
不同。为了解决该问题,您必须在链接时使用Assembly.LoadFrom(string)
。这是Msdn的段落:
考虑C ++可执行文件可能会抛出BadImageFormatException。这很可能是由C ++引起的编译器从中剥离重定位地址或.reloc节您的可执行文件。为您的C ++保留.reloc地址可执行文件,在链接时指定/ fixed:no。