RavenDB和SignalR Nuget包依赖冲突

10

基本冲突。

SignalR要求Newtonsoft.Json版本为4.0.7或更高版本,而RavenDB需要版本等于4.0.5。这显然意味着它们无法并存安装。

所以除了从它们中的一个下载源代码并在本地解决依赖项,然后检查从其中创建的二进制文件之外,还有可能通过NuGet管理依赖关系,并且可能只是转发DLL调用(例如Mvc每个新版本都会这样做)吗?


也遇到了这个问题。根据NuGet版本号规范,newtonsoft.json 4.0.8应该与4.0.5兼容。无论是RavenDb还是Newtonsoft.Json都出了问题。真的很烦人。 - terjetyl
1
请注意,RavenDB现在支持4.0.8。 - Ayende Rahien
太好了,再等几天你的所有问题都会得到解决 :) - dasheddot
@AyendeRahien 很好。如果再次出现这种情况,我仍然感兴趣了解可以做些什么。我看到了4.0.6更新的回滚,所以认为更新到4.0.8可能需要一些时间(似乎我错了 :) )。 - Rangoric
2个回答

10

有一种更为合适的方法来解决这个冲突。由于.NET提供了重定向程序集的可能性,为什么不利用它呢;)

你只需要在App.config中添加类似以下内容(请注意是否已经放置了assemblyBinding):

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
         <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
         <bindingRedirect oldVersion="0.0.0.0-4.0.8.0" newVersion="4.0.5.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

有了这个重定向设置,您只需添加RavenDB包和SignalR包(它们各自引用另一个版本的JSON.NET),它就会修复问题。
此外,我在SignalR上提出了pull request,请求支持JSON.NET 4.0.5版本(因为它应该向后兼容)。

1
重定向是相当危险的。例如,当我们重定向到使用新版本的Json.NET的用户时,RavenDb开始在文档中丢失带有Guid的字段。 - Mike Chaliy
1
我得稍后再看这个,但我不能同时安装这两个包。那么你是说NuGet会识别重定向并相应地加载包?还是我需要按照某种特定的顺序来做这件事?(如果这再次出现。) - Rangoric

3

几天前我们遇到了同样的问题,这是一个麻烦的问题。我们发现你不能使用NuGet来管理依赖项。相反,我们将SignalR更改为使用4.0.5并在本地编译。


是的,SignalR 绝对是我最终会在本地完成的。 - Rangoric
通过本地编译,您是指获取SignalR源代码,更改对Newtonsoft.Json的引用,编译,然后将编译后的代码放置在您的解决方案中吗? - Bob Horn
是的,那就是我当时的意思。然而(!)在RavenDB 2.0中不再需要处理这个问题,因为对Newtonsoft.Json的依赖已经内部化,所以不会再有冲突了! - Daniel Lang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接