Assembly.LoadFile()抛出有关缺少清单的异常

sco*_*ott 4 c#

例外是:

该模块应该包含一个程序集清单.(HRESULT异常:0x80131018)

我明白这一点:

Assembly lvAssembly = Assembly.LoadFile(aPathFileName); 
Run Code Online (Sandbox Code Playgroud)

正在加载的文件是由不同应用程序生成的插件.如果我将插件的目标框架版本从4.0更改为3.5并重新编译.插件加载正常.我不明白为什么Assembly.LoadFile方法会关心插件编译的.net框架的版本.

将插件加载到4.0的应用程序更改目标框架没有帮助.

Han*_*ant 6

问题的第一部分是预期结果,CLR版本2无法加载.NET 4.0程序集,元数据格式已更改.

最后一段很难解释.它可能与使用LoadFile()有关,它是加载程序集的一种令人讨厌的方式.一种可能的故障模式是您的插件程序集可能仍然具有对2.0程序集的引用.当它引用另一个被编译为针对早期框架的程序集时,这是很正常的.这通常由程序集加载器静默解析,它只是用相应的4.0引用替换2.0引用.

您可以使用ildasm.exe验证此理论,在插件程序集中运行它并查看.assembly指令的清单.版本号很容易看到,你会得到类似的东西

.assembly extern mscorlib as mscorlib_2
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) 
  .ver 2:0:0:0
}
Run Code Online (Sandbox Code Playgroud)

始终支持Assembly.LoadFrom().