2016-09-04 101 views
4

我正在研究一个项目,其中包含UmbracoCms NuGet包,该包内部使用log4net框架版本1.2.11来执行日志记录。现在我们要添加另一个依赖于log4net 1.2.15的包(SharpRaven.Log4Net)。只需安装第二NuGet包产生一个例外:如何使用具有不同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 versinos没有publicToken。

我真的没有看到任何其他选项,所以任何帮助,将不胜感激。

更新解释,为什么这不是我想强调的是,这里的问题是,由该包的NuGet引用log4net的组件有一个null的公钥3158928

重复的问题。之前发布的问题Referencing 2 different versions of log4net in the same solution有一些很好的答案,但没有这个问题,因此也没有回答这个问题。在你的配置

基本上你犯了一个文件夹的每个版本,然后将其绑定:

+0

您可以使用空公钥在汇编重定向。我已经解决了与Umbraco本土生成的Log4Net和其他引用使用重复引入其自己的Log4Net版本完全相同的问题。 – CodeCaster

+0

不知道你是如何做到的,但对我来说,没有PublicKeyToken的绑定节点被完全忽略。它似乎也与这个MSDN页面相矛盾:https://msdn.microsoft.com/en-us/library/7wd6ex19.aspx它说:“如果两个组件引用同一强命名程序集的不同版本,则运行时会自动添加绑定重定向到较新版本的程序集“,它具体讲述”强名“程序集。 – Robba

+0

我无意去讨论它为什么会起作用或不起作用,所以我重新提出了这个问题。祝你好运。 – CodeCaster

回答

0

您可以在此awnser并行运行log4net的版本一侧

<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> 
+0

感谢@Peter的回答,但是两个NuGet包引用的版本没有publicKeyToken,并且添加一个没有绑定的绑定似乎不起作用。 – Robba

相关问题