none
多Dll的程序更新时,如何一次只更新一个DLL文件,而不必将所有引用项一起更新 RRS feed

  • 问题

  • 如题,假设,一个解决方案包含了2个项目:A(exe)、B(dll),其中A引用B;

    那么,当解决方案完成后,程序能正常运行

    现在,B中有一些算法进行了更新升级,更新了B.dll之后,程序就打不开了,报“程序集清单定义与程序集引用不匹配”

    如何能在目标机器上只更新一个B.dll文件,而不必更新B和所有引用B的程序集?

    也就是,验证的时候,只验证签名(需要验证签名),不验证版本号;

    2018年3月16日 6:54

答案

  • 验证的时候,只验证签名(需要验证签名),不验证版本号.

    需要在配置文件中重定向,例子

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>

    对Newtonsoft.Json的3.0,4.0都直接重定向到10.0,您只需要保证10.0的程序集存在即可,其它版本的文件都可以忽略。




    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2018年3月20日 1:09

全部回复

  • Hi,

    欢迎在MSDN论坛发帖。

    >>报“程序集清单定义与程序集引用不匹配”

    根据这个错误信息我们知道,你是在更新B.dll的时候,清单文件已经被改变,然而你引用的程序集里面的清单文件,并没有随之一起更新,所以要更新整个引用B。如果把B.dll 单独做成一个程序集,会不会就不影响到其他程序集。

    关于程序集的是清单文件不匹配的问题,我发现下面几个文章,希望对你理解程序集的问题,有所帮助。

    http://www.cnblogs.com/anuo/p/4069322.html

    https://support.microsoft.com/zh-cn/help/971052/the-located-assembly-s-manifest-definition-does-not-match-the-assembly

    Best Regards,

    Hart

    • 注意:此回复包含对第三方万维网站点的引用。 Microsoft提供此信息为您提供方便。 Microsoft不控制这些网站,并且没有测试在这些网站上发现的任何软件或信息; 因此,Microsoft不能对任何软件或信息的质量,安全性或适用性做任何声明。 使用互联网上发现的任何软件都存在固有的危险,Microsoft警告您,在从互联网检索任何软件之前,请确保您完全理解风险。


    MSDN Community Support Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年3月16日 8:11
    版主
  • 验证的时候,只验证签名(需要验证签名),不验证版本号.

    需要在配置文件中重定向,例子

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>

    对Newtonsoft.Json的3.0,4.0都直接重定向到10.0,您只需要保证10.0的程序集存在即可,其它版本的文件都可以忽略。




    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2018年3月20日 1:09