代码之家  ›  专栏  ›  技术社区  ›  Russell Giddings

.NET程序集绑定重定向使用不同的公钥标记

  •  48
  • Russell Giddings  · 技术社区  · 14 年前

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

    例如,我有两个程序集…

    system.web.mvc,版本=1.0.0.0,区域性=中性,publicKeyToken=空

    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 回复  |  直到 6 年前
        1
  •  37
  •   gavioto Mark Worth    6 年前

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

    bindingRedirect标记只有oldversion和newversion属性,因此无论如何都无法告诉它“空”版本。

    但背后的真正原因是 strong name mechanism

        2
  •  6
  •   Community Dan Abramov    7 年前

    您可能可以使用 AppDomain.AssemblyResolve 做那个的事件。我已经包含了一些示例代码 this answer .

        3
  •  1
  •   Community Dan Abramov    7 年前

    似乎无法使用绑定重定向,但在我的例子中,我确实通过修改引用dll中请求的令牌值,设法解决了不同PublicKeyTokens的问题:

    将dll分解为il,更改引用,重新组装(并重新签名-如果没有密钥文件,这可能是一个问题)。

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