3rd 方库是指不同版本的 log4net.dll
Posted
技术标签:
【中文标题】3rd 方库是指不同版本的 log4net.dll【英文标题】:3rd party libraries refer to different versions of log4net.dll 【发布时间】:2010-12-07 20:22:36 【问题描述】:我有两个对我的应用程序至关重要的不同库,它们依赖于不同版本的 log4net.dll。当我正在使用的第 3 方被调用时,在我的 bin 文件夹中尝试这两个 dll 会出现通常的错误:
无法加载文件或程序集“log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)
有没有一种方法可以让应用程序同时引用这两个 dll?第三方 dll 是 Windsor 的 IOC 容器和 Paypal 的 API,两者都对这个应用程序至关重要。
【问题讨论】:
我在这里有点冒险,但我认为即使不拥有代码,您也可以 ILMerge 程序集,这将解决这个问题。 【参考方案1】:这个问题可能有一些对你有帮助的答案。
Referencing 2 different versions of log4net in the same solution
或者,如果 Windsor 的 Logging Facility 依赖于 log4net 而不是 Windsor 本身,则您可以根据 PayPal API 使用的 log4net 版本编写自己的 log4net 抽象,并告诉 Windsor 使用它。
这里是 Castle 源代码存储库中 log4net 抽象的位置: https://github.com/castleproject/Castle.Core/tree/master/src/Castle.Services.Logging.log4netIntegration
我不使用 Castle,所以我不能告诉你如何配置它来引用你自己的 log4net 抽象,但我敢打赌这不是太难(假设它是可能的)。
这里是 SO 上另一篇文章的链接,该文章描述了使用 log4net 配置 Castle。它还简要讨论了编写自定义日志记录工具:
Logging with Castle.Facilities.Logging and log4net
祝你好运!
【讨论】:
谢谢,第一个链接成功了!通过删除对 log4net.dll 的所有项目引用,而是使用 app/web.config 创建对不同版本的运行时引用,应用程序能够找到两个 dll 而不会抱怨不匹配。有关详细信息,请参阅 wageoghe 的“在同一解决方案中引用 2 个不同版本的 log4net”链接。【参考方案2】:我认为,另一条路要走,但我自己从未这样做过,就是将它们放入 GAC。
我相信你可以在 GAC 中拥有同一个 dll 的不同版本,你应该没问题。
但我也可能疯了:)
【讨论】:
可以,但这不是一个优雅的解决方案。 您会遇到可伸缩性问题,因为您必须为此在每台机器上执行 GAC 安装。将其放入 .config 允许它与应用程序一起部署。以上是关于3rd 方库是指不同版本的 log4net.dll的主要内容,如果未能解决你的问题,请参考以下文章