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

时间:2011-01-12 16:27:42

标签: c#

例外是:

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

我明白了这一点:

Assembly lvAssembly = Assembly.LoadFile(aPathFileName); 

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

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

1 个答案:

答案 0 :(得分: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
}

始终支持Assembly.LoadFrom()。