当第三方lib依赖于旧版本时,使用具有新publicKeyToken的另一版本的程序集

我想使用带有nhibernate的新版本的log4net . log4net版本是我自己从svn源编译的,所以我必须使用新密钥对其进行签名,这意味着更改了publicKeyToken . 我还将版本设置为1.2.11.0 . 问题是nhibernate引用了旧的1.2.10.0版本的log4net .

我尝试在app.config中使用此部件配置程序集绑定重定向:

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="log4net"
                      publicKeyToken="1b44e1d426115821"/>
    <bindingRedirect oldVersion="1.2.10.0"
                     newVersion="1.2.11.0"/>
  </dependentAssembly>
</assemblyBinding>

但它似乎没有任何效果 . 我认为这是因为publicKeyToken不匹配 .

有没有其他方法可以做到这一点或做我:a . 使用log4net 1.2.10并使用我感兴趣的svn代码库中的添加和修复创建一个log4net扩展项目?或b . 使用我自己的log4net build OR c构建我自己的nhibernate版本 . 使log4net团队使用正确的publicKeyToken发布新版本的log4net

我更喜欢c . 老实说,我无法理解为什么他们没有多年发布新版本,svn源中有很多修复和新功能 .

回答(1)

2 years ago

你想要的正是签署旨在防止的 .

请注意,您的选项c)还需要新的Hibernate构建 .

我认为b)是你最好的投篮 .