例外是:
该模块应该包含一个程序集清单。 (HRESULT异常:0x80131018)
我明白了这一点:
Assembly lvAssembly = Assembly.LoadFile(aPathFileName);
正在加载的文件是由其他应用程序生成的插件。 如果我将插件的目标框架版本从4.0更改为3.5并重新编译。插件加载正常。我不明白为什么Assembly.LoadFile方法会关心插件编译的.net框架的版本。
更改将插件加载到4.0的应用程序的目标框架没有帮助。
答案 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()。