Assembly.LoadFrom起作用,Assembly.Load不起作用

时间:2019-11-16 14:23:58

标签: c# .net-assembly

我正在尝试使用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工作?

1 个答案:

答案 0 :(得分:3)

Assmebly.Load在思考C ++可执行文件时可能会抛出BadImageException,这与Assembly.LoadFrom(string)不同。 为了解决该问题,您必须在链接时使用/fixed:no。 这是Msdn的段落:

  

反映C ++可执行文件可能会引发   BadImageFormatException。这很可能是由C ++引起的   编译器从中剥离重定位地址或.reloc节   您的可执行文件。为您的C ++保留.reloc地址   可执行文件,在链接时指定/ fixed:no。