0

我们正在构建一个基于 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但不确定这是否是标准化方法?

提前感谢艾尔

4

1 回答 1

0

这实际上只有两种方法。一种是将您的代码加载到完全不同的 AppDomain 中,并且不依赖 umbraco 或 EPiServer。然后,您可以自由加载所需的任何版本的 log4net,因为它将是唯一加载的版本。这给您留下了依赖 umbraco 或 EPiServer 的 AppDomain 与您的 AppDomain之间的通信问题。这不是微不足道的。查看诸如 Microsoft Addin Framework (MAF) 之类的内容将向您展示它为何如此复杂以及如何操作。

另一种选择是使用类似 ilmerge 的工具将 log4net 程序集与您的程序集合并。这样,每当您的代码引用 log4net 时,它实际上是在引用它的私有版本。还有其他 3rd 方工具,如 SmartAssembly,在合并程序集时更可靠。我认为 ilmerge 已经有一段时间没有工作了,也没有得到真正的支持。

于 2013-04-04T14:47:11.513 回答