.NET:强签名程序集的加载问题 之 版本重定向

背景

多数解决方案会包含多个项目,某些支持插件架构的解决方案中,更是包含多个插件项目,这些项目会使用一些第三方NuGet Packages,如果管理不慎,解决方案中会出现多个版本的引用,这在编译期间不会引起问题,甚至开发调试期间也不会有问题,不过在发布过程会出现一些诡异的问题,如:未能加载xxx.dll等问题。本文简单的介绍一下解决思路。

继续看之前可以先看看这篇文章:http://www.cnblogs.com/happyframework/p/3399975.html

版本重定向

强签名程序集的标识包含了版本号,.NET 在执行程序集探测之前,会先根据版本重定向配置解析出需要加载的版本号。

 

 1 <configuration>
 2    <runtime>
 3       <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 4          <dependentAssembly>
 5             <assemblyIdentity name="myAssembly"
 6                               publicKeyToken="32ab4ba45e0a69a1"
 7                               culture="neutral" />
 8             <bindingRedirect oldVersion="1.0.0.0"
 9                              newVersion="2.0.0.0"/>
10             <codeBase version="2.0.0.0"
11                       href="http://www.litwareinc.com/myAssembly.dll"/>
12          </dependentAssembly>
13       </assemblyBinding>
14    </runtime>
15 </configuration>


解析出版本号以后,剩下的就是经典的程序集探测过程了。需要说明的是:即使最终加载出重定向后的版本的程序集,程序也不见得能正常运行,因为:重定向后的程序集必须和编译时使用的程序集二进制兼容,所谓二进制兼容也容易理解,就是编译时使用的成员签名不能发生变化。

 

posted on 2014-05-20 10:22  幸福框架  阅读(1088)  评论(0编辑  收藏  举报

导航

我要啦免费统计