【问题标题】:RavenDB and SignalR Nuget Package Dependency ConflictRavenDB 和 SignalR Nuget 包依赖冲突
【发布时间】:2012-02-20 23:27:19
【问题描述】:

基本冲突。

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 做错了什么。真烦人。
  • 请注意,RavenDB 现在支持 4.0.8
  • 太好了..等几天,你所有的问题都解决了:)
  • @AyendeRahien 非常好。如果再次出现这种情况,仍然对可以做些什么感兴趣。我看到了 4.0.6 更新的回滚,所以认为更新到 4.0.8 可能需要一些时间(似乎我错了:))

标签: nuget ravendb signalr


【解决方案1】:

还有一种更合适的方法来解决这个冲突。 既然 .NET 为我们提供了redirect assemblies 的可能性,为什么不使用它;)

您可以在 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 的其他版本)并进行修复。

此外,我还通过pull request on SignalR 请求支持 4.0.5 版本的 JSON.NET(因为它应该向后兼容)

【讨论】:

  • 重定向非常危险。例如,当我们重定向到用户新版本的 Json.NET RavenDb 时,开始丢失文档中带有 Guid 的字段。
  • 我稍后会看看这个,但是我不能同时安装这两个包。那么你是说 NuGet 识别重定向并相应地加载包吗?或者我需要执行某个特定的命令吗? (如果这再次出现。
【解决方案2】:

几天前我们遇到了同样的问题,这是一个令人讨厌的问题。我们发现您无法使用 NuGet 管理依赖项。相反,我们将 SignalR 更改为使用 4.0.5 并在本地编译。

【讨论】:

  • 是的 SignalR 绝对是我最终会在本地做的。
  • 本地编译是指获取 SignalR 源代码,更改对 Newtonsoft.Json 的引用,编译,然后将编译后的代码放入您的解决方案中吗?
  • 是的,这就是我当时的意思。但是(!)在 RavenDB 2.0 中不再需要处理这个问题了,因为对 Newtonsoft.Json 的依赖已经被内部化了,所以不再有冲突了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
  • 2021-02-26
相关资源
最近更新 更多