代码之家  ›  专栏  ›  技术社区  ›  Andriy Buday

使用系统中已经使用的其他第三方版本(log4net)的第三方的最佳方法是什么?

  •  4
  • Andriy Buday  · 技术社区  · 15 年前
    • 目前我们使用1.2.10.0版本的log4net,我们应该开始使用其他团队开发的一些第三方组件。
    • 上面提到的组件引用了1.2.9.0版的log4net。
    • 所有二进制文件都部署到一个文件夹中。

    我敢肯定,我们不能用1.2.9.0版本重建我们的源,因为有太多的其他依赖项,需要付出很多努力。有没有其他方法来解决这个问题?我不是在寻找与clr程序集加载有关的过于复杂的东西,而是非常乐意听到它们。我在寻找最简单的方法。我想有人也遇到过同样的问题。

    编辑 : 如果有人感兴趣,我就在上面写了博客: http://andriybuday.blogspot.com/2010/10/log4net-versions-deployment-issue.html

    编辑2 :所以,这个编辑不是答案,但它代表了这个故事的意外结束。我刚从博客上复制了它。

    有趣的是,这个故事的结尾是快乐的。

    你知道这一切最有趣的是什么吗?它就是这样完成的。我们联系了那些开发我们现在应该使用的组件的人。他们告诉我们,他们在更新log4net 1.2.10.0的动态配置文件时遇到了问题。用他们的话说,新版本的log4net不能做到这一点。所以他们以简单的应用程序的形式发送,证明了这一点,事实上,在应用程序运行时更新了配置之后,1.2.10.0没有赶上新的配置,但1.2.9.0运行得很好。这让我非常惊讶,所以我到这个下载页面下载了最新的二进制文件。当我尝试的时候,它开始工作了!!!!实际上,我猜他们只是使用了log4net buit的版本和对.NET Framework 1.1的引用,我们应该使用一个用.NET 2.0构建的版本(是的!实际上,如果你想下载,你会看到。)

    在所有这些之后,他们特别为我们创建了他们的源代码的新的子版本,并且他们能够修复一些小的bug。好消息!意外的结局!:)

    2 回复  |  直到 15 年前
        1
  •  2
  •   Dirk Vollmar    15 年前

    建议的方法是将两个版本的log4net安装到全局程序集缓存(GAC)中。

    但是,如果您不能更改从单个文件夹加载所有程序集的要求,那么重命名项目使用的log4net副本并引用重命名的版本可能是最容易的。

        2
  •  2
  •   Bronumski    15 年前

    我不知道两个版本之间的更改是什么(我们自己使用1.2.10.0),但如果接口没有更改,则可以尝试将程序集重定向到较新的版本:

    <configuration>
       <runtime>
          <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
           <dependentAssembly>
             <assemblyIdentity name="log4net"
                               publicKeyToken="b32731d11ce58905"
                               culture="neutral" />
             <bindingRedirect oldVersion="1.2.9.0"
                              newVersion="1.2.10.0"/>
           </dependentAssembly>
          </assemblyBinding>
       </runtime>
    </configuration>
    

    确保密钥与我提供的密钥相同,因为它们可能在两者之间发生了更改。

    http://msdn.microsoft.com/en-us/library/7wd6ex19(VS.71).aspx