.Net程序集绑定重定向与不同的公钥标记

时间:2010-02-03 10:43:58

标签: .net asp.net assemblybinding publickeytoken

如果公钥标记在旧版本上为null并且在较新版本上设置,是否可以在引用的程序集的不同版本之间执行程序集绑定重定向?

例如,我有两个程序集......

System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

以下程序集绑定重定向是否应该在Asp.Net web.config中运行...

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
      <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

3 个答案:

答案 0 :(得分:37)

不,这是不可能的。程序集需要具有相同的publicKeyToken。

bindingRedirect标记只有oldVersion和newVersion属性,因此无论如何也无法告诉它“null”版本。

但由于strong name mechanism

,解释了背后的真正原因

答案 1 :(得分:6)

您可以使用AppDomain.AssemblyResolve事件来执行此操作。我在this answer中添加了一些示例代码。

答案 2 :(得分:1)

似乎无法使用绑定重定向,但在我的情况下,我确实设法通过修改引用DLL中请求的令牌值来解决不同publicKeyTokens的问题:

将dll反汇编为IL,更改引用,重新组合(并重新签名 - 如果您没有密钥文件,则可能会出现问题)。

(参见我对when referencing assemblies, is it possible to insist on a version number but ignore the publickeytoken? (ie accept signed/unsigned)的评论)