zoukankan      html  css  js  c++  java
  • .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>


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

  • 相关阅读:
    教你用纯Java实现一个网页版的Xshell(附源码)
    Learn Terraform--Getting Started--Installing Terraform
    Install Terraform on Windows, Linux and Mac OS
    Installing kubectl
    Creating a Cron Job in K8S
    Patch multi versions of windows via Power shell
    Bash to check SSL cert expired
    K8S dashboard 创建只读账户
    K8S Link
    Kubernetes
  • 原文地址:https://www.cnblogs.com/happyframework/p/4098937.html
Copyright © 2011-2022 走看看