C# 引用不同版本的log4net

C# 引用不同版本的log4net,c#,dependency-injection,dependencies,log4net,C#,Dependency Injection,Dependencies,Log4net,我们正在基于log4net构建一个简单的日志库。该项目有一些用于捕获未处理异常等的通用模块 问题是,我们希望将此库部署到其他web解决方案,如umbraco和EPiServer,它们都已经使用log4net,并且使用不同的版本。如果我们从日志库部署log4net程序集,那么umbraco和EPiServer都会抱怨版本不匹配 解决这个问题的最佳方法是什么?我在这里读过这个方法,但不确定这是否是一个标准化的方法 提前谢谢 实际上只有两种方法可以做到这一点。一种是在完全不同的AppDomain中加载

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

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

解决这个问题的最佳方法是什么?我在这里读过这个方法,但不确定这是否是一个标准化的方法

提前谢谢
实际上只有两种方法可以做到这一点。一种是在完全不同的AppDomain中加载代码,并且不依赖于umbraco或epserver。然后,您可以自由加载任何您想要的log4net版本,因为它将是唯一加载的版本。这就给您留下了依赖于umbraco或EPiServer的AppDomain与您的AppDomain之间通信的问题。这不是小事。通过查看Microsoft Addin Framework(MAF)等内容,您将了解为什么它很复杂以及如何实现它


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

可能重复“另一个选项是使用类似ilmerge的东西将log4net程序集与您的程序集合并。”-或者当然,只需将log4net源代码拉入您的项目并在…@MattDavey中编译它,直接使用源代码可能会有一些许可问题;但是,是的,这是一个同等的选择。谢谢你们的回答。另一个选项可能是使用ServiceStack.Logging或Common.Logging之类的工具,但这两种工具似乎都需要部署log4net.dll,这将再次引发依赖性问题。我的假设是对的吗?