例外是:
该模块应该包含一个程序集清单.(HRESULT异常:0x80131018)
我明白这一点:
Assembly lvAssembly = Assembly.LoadFile(aPathFileName);
Run Code Online (Sandbox Code Playgroud)
正在加载的文件是由不同应用程序生成的插件.如果我将插件的目标框架版本从4.0更改为3.5并重新编译.插件加载正常.我不明白为什么Assembly.LoadFile方法会关心插件编译的.net框架的版本.
将插件加载到4.0的应用程序更改目标框架没有帮助.
问题的第一部分是预期结果,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().
| 归档时间: |
|
| 查看次数: |
7806 次 |
| 最近记录: |