首页 > 解决方案 > 不同版本的Nuget包版本解析

问题描述

我正在使用一个 Nuget 包,它本身引用了以前的版本System.Reactive(特别是 4.3.2)。我不是维护者,不能改变它,但仍然想使用这个包。但是,我的解决方案中的所有项目都引用了 (5.0.0) 的较新版本System.Reactive,我目前无权更改它。这会导致版本冲突。

过去我会使用绑定重定向,但我们最近已经过渡到 .NET Core 和PackageRefernces,我不清楚如何使用PackageReferences 解决此类版本冲突。

那么两个密切相关(我假设)的问题:

  1. 是否可以解决上述情况,如果可以,如何解决?
  2. 如何解决相反的情况(外部包中的新版本,我的解决方案/项目中的旧版本)?

标签: c#.net-corenuget-package

解决方案


从根本上说,因为您要解决两个不同的主要版本,所以目前没有解决这个问题的愉快方法。

从 4.x 到 5.x的事实System.Reactive表明存在重大变化,假设它实际上遵循 SemVer。因此,您所依赖的软件包完全有可能依赖于 5.0.0 中System.Reactive删除的某些内容。

除非您想自己使用AssemblyLoadContext某种隔离级别来加载程序集,否则您基本上不走运。.NET 目前根本无法很好地处理这种情况

我建议你找出最不痛苦的方法,将所有东西都放到同一个主要版本上。这可能意味着:

  • 降级你的System.Reactive依赖
  • 说服其他包的维护者升级他们的System.Reactive依赖(这意味着他们也创建了一个新的主要版本......)
  • 分叉另一个包,以便您可以System.Reactive自己升级它的依赖项

不幸的是,这些都不可能是简单的。


推荐阅读