【问题标题】:How to use two different NuGet packages with different log4net version requirements如何使用具有不同 log4net 版本要求的两个不同 NuGet 包
【发布时间】: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 相矛盾,它说:“如果两个组件引用同一个强名称程序集的不同版本,运行时会自动将绑定重定向添加到程序集的较新版本”,它专门谈到“强命名”程序集。
  • 我无意去讨论它为什么会或不会起作用,所以我重新提出了这个问题。祝你好运。

标签: c# nuget log4net


【解决方案1】:

您可以并排运行 log4net 版本,如 awnser

基本上你为每个版本创建一个文件夹,然后将它绑定到你的配置中:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="log4net" publicKeyToken="681549d62126b7b8" />
        <codeBase version="1.2.9.0" href="log4netv1.2.9.0\log4net.dll" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" />
        <codeBase version="1.2.10.0" href="log4netv1.2.10.0\log4net.dll" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" />
        <codeBase version="1.2.11.0" href="log4net.dll" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

【讨论】:

  • 感谢@Peter 的回答,但是两个 NuGet 包引用的两个版本没有 publicKeyToken 并且添加没有一个绑定似乎不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 2013-07-08
相关资源
最近更新 更多