进行插件式编程的时候,经常性地弹出这么个东西找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040),往往这种问题特别难以解决,搞定了一个还要出另外一个。得研究一下怎么处理。
引用不匹配#
这里提示需要加载一个4.2.0.0版本的dll,我先看看文件夹下面有没有对应的dll,查看文件dll的详细信息。
这个版本号4.6.27818.1和4.2.0.0也差的有点太远了吧,是这个问题?其实不是的,这个地方显示的版本和程序集的版本不是一回事。
程序集版本#
.NET程序有很多版本的说法,官方对这个有解释,通过文件管理器获得的版本是AssemblyFileVersion,而程序集加载器定位的版本使用的是AssemblyVersion,这两个东西完全不是一回事。通过右键,我们看不到AssemblyVersion,比较简单的方式,可以通过Powershell脚本来查看程序集版本。
Copy
ls *.dll -r |
ForEach-Object {
try {
∣ A d d − M e m b e r N o t e P r o p e r t y F i l e V e r s i o n ( _ | Add-Member NoteProperty FileVersion ( ∣Add−MemberNotePropertyFileVersion(.VersionInfo.FileVersion)
∣ A d d − M e m b e r N o t e P r o p e r t y A s s e m b l y V e r s i o n ( [ R e f l e c t i o n . A s s e m b l y N a m e ] : : G e t A s s e m b l y N a m e ( _ | Add-Member NoteProperty AssemblyVersion ( [Reflection.AssemblyName]::GetAssemblyName( ∣Add−MemberNotePropertyAssemblyVersion([Reflection.AssemblyName