引用不同版本的log4net

时间:2013-04-04 12:00:13

标签: c# dependency-injection dependencies log4net

我们正在构建一个基于log4net的简单日志库。该项目有一些常见的模块用于捕获未处理的异常等。

问题是我们希望将此库部署到其他Web解决方案,例如umbraco和EPiServer,它们都已经使用了log4net,并使用了不同的版本。如果我们从日志库中部署log4net程序集,那么umbraco和EPiServer都会抱怨版本不匹配。

解决这个问题的最佳方法是什么?我在这里阅读了这种方法http://www.claassen.net/geek/blog/2011/08/using-log4net-without-requiring-it-as-a-dependency.html,但不确定这是否是一种标准化方法?

提前致谢 人

1 个答案:

答案 0 :(得分:0)

实际上只有两种方法。一种是在完全不同的AppDomain中加载代码,不依赖于umbraco或EPiServer。然后你可以自由加载你想要的任何版本的log4net,因为它将是唯一加载的版本。这使您无法在 依赖于umbraco或EPiServer的AppDomain与您的AppDomain之间进行通信。这不是微不足道的。看看像Microsoft Addin Framework(MAF)这样的东西会告诉你为什么它很复杂以及如何去做。

另一种选择是使用ilmerge之类的东西将log4net程序集合并到你的程序中。这样,只要您的代码引用log4net,它就会有效地引用它的私有版本。还有其他第三方工具,如SmartAssembly,在合并装配时更加可靠。我不认为ilmerge已经有一段时间了,并没有得到真正的支持。