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

时间:2010-10-04 09:55:42

标签: .net log4net reference

  • 目前我们使用版本1.2.10.0的log4net,我们应该开始使用其他团队开发的一些第三方组件。
  • 提到组件引用版本1.2.9.0的log4net。
  • 所有二进制文件都部署在一个文件夹中。

我确信我们无法使用1.2.9.0版本重建我们的源代码,因为有太多其他依赖项并且需要很多努力。有没有其他方法可以解决这个问题?我不是在寻找与CLR组件装载有关的太复杂,但会非常愉快地听到它们。我正在寻找最简单的方法。我想有人遇到了同样的问题。

EDITED : 如果有人有兴趣我就创建了博客帖子: http://andriybuday.blogspot.com/2010/10/log4net-versions-deployment-issue.html

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

这个故事的有趣 - 快乐结束

你知道这一切最有趣吗?它是如何完成的。我们联系了那些开发我们现在应该使用的组件的人。他们告诉我们,他们遇到了更新log4net 1.2.10.0的动态配置文件的问题。按照他们的说法,新版本的log4net无法做到这一点。因此,他们发送了简单的应用程序来演示这一点,事实上,在应用程序运行时更新配置后,1.2.10.0没有赶上新配置,但1.2.9.0工作得很好。这让我非常惊讶,所以我去了这个下载页面并下载了最新的二进制文件。当我尝试它开始工作!实际上我猜他们只是使用log4net buit的版本来引用.net framework 1.1,我们应该使用一个内置的.net 2.0(是的!实际上如果你下载就会看到。)

在完成所有这些之后,他们特别为我们创建了他们的源的新子版本,他们能够修复一些小错误。好消息!意外的故事结束! :)

2 个答案:

答案 0 :(得分:2)

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

但是,如果您无法更改从单个文件夹加载所有程序集的要求,则最简单的方法是重命名项目使用的log4net副本并引用重命名的版本。

答案 1 :(得分:2)

我不知道两个版本之间的变化是什么(我们自己使用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