【发布时间】:2016-09-04 09:28:29
【问题描述】:
我正在开发一个项目,其中包含 UmbracoCms NuGet 包,该包在内部使用 log4net 框架版本 1.2.11 来执行日志记录。现在我们要添加另一个依赖于 log4net 1.2.15 的包 (SharpRaven.Log4Net)。只需安装第二个 NuGet 包就会产生异常:
Could not load file or assembly 'log4net, Version=1.2.11.0, Culture=neutral,
PublicKeyToken=null' or one of its dependencies. The located assembly's
manifest definition does not match the assembly reference. (Exception from
HRESULT: 0x80131040)
这显然是因为 Umbraco 引用的是 1.2.11 版本,而我的项目现在引用的是 1.2.15 版本,但是我该如何解决呢?我不能:
- 更改任一包的版本要求(真的不愿意从源代码构建它们)
- 将两个引用添加到我的项目中,因为它们是相同的组件(VS 不允许这样做)
- 删除 1.2.15 版本并添加 1.2.11 版本。这给了我同样的错误,但随后出现了另一个版本号。
- 创建 bindingRedirect,因为所需的 log4net 版本没有 publicToken。
我真的没有看到任何其他选项,因此我们将不胜感激。
更新说明为什么不是 3158928 的重复问题
我想强调,这里的问题是 NuGet 包引用的 log4net 程序集的 PublicKeyToken 为 null。较早发布的问题Referencing 2 different versions of log4net in the same solution 有一些很好的答案,但没有这个问题,因此没有回答这个问题。
【问题讨论】:
-
您可以在程序集重定向中使用空的 publicKeyToken。我已经解决了与 Umbraco 的本土 Log4Net 和其他参考文献完全相同的问题,使用副本引入了他们自己的 Log4Net 版本。
-
不知道你当时是怎么做的,但对我来说,一个没有 PublicKeyToken 的绑定节点被完全忽略了。它似乎也与这个 MSDN 页面 msdn.microsoft.com/en-us/library/7wd6ex19.aspx 相矛盾,它说:“如果两个组件引用同一个强名称程序集的不同版本,运行时会自动将绑定重定向添加到程序集的较新版本”,它专门谈到“强命名”程序集。
-
我无意去讨论它为什么会或不会起作用,所以我重新提出了这个问题。祝你好运。