.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>


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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值