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的主要内容,如果未能解决你的问题,请参考以下文章

3rd 方库冲突的定义/重新定义

如何在 webpack 中包含 3rd 方库

如何将类成员函数传递给 3rd 方库中的方法?

带有 3rd 方库的 Grails Asset-Pipeline 系统

如何在 Ios 扩展中使用 3rd 方库?

QT 未定义对 3rd 方库的引用