【发布时间】:2021-02-10 20:31:44
【问题描述】:
我正在使用一个 Nuget 包,它本身引用了以前版本的 System.Reactive(特别是 4.3.2)。我不是维护者,不能改变它,但仍然想使用这个包。但是,我的解决方案中的所有项目都引用了较新版本的 System.Reactive (5.0.0),我目前无权更改它。这会导致版本冲突。
过去我会使用绑定重定向,但我们最近已转换到 .NET Core 和 PackageRefernces,我不清楚如何使用 PackageReferences 解决此类版本冲突。
那么两个密切相关的(我会假设)问题:
- 是否可以解决上述情况,如果可以,如何解决?
- 如何解决相反的情况(外部包中的新版本,我的解决方案/项目中的旧版本)?
【问题讨论】:
-
您描述的方式应该没问题(请注意,当您在包引用中有单个版本时,您实际上是在说您很高兴有任何版本大于或等于那个,没有指定具体的单一版本)。如果你发布你的错误,你可能会有更好的机会得到答案
-
@rbennett485:我不明白它应该如何被期望 - 指定版本号不在 SemVer 术语中意味着“任何更大的版本”,甚至如果 NuGet 以这种方式对待它。我预计在 4.x 和 5.x 之间会有重大变化,我们无法知道 OP 所依赖的包是否会被这些重大变化破坏。
-
@JonSkeet 问题并不清楚,但我假设版本控制冲突意味着 NuGet 解析版本的错误,而不是主要 semver 版本之间的二进制不兼容导致的运行时异常
-
@rbennett485:我想说的是,即使它不会导致 NuGet 出错,仍然从根本上存在版本冲突,只是可能被 NuGet 掩盖。我当然不会将这种情况描述为“这应该没问题”。也许“这不应该导致 NuGet 解析出现问题”,但这距离“很好”还有很长的路要走。
-
@JonSkeet 这对于系统包来说可能是合理的,但一般来说,NuGet 包的发布者在 semver 方面非常糟糕,以至于我倾向于同意 NuGet 工具将主要颠簸视为与任何相同的模型其他
标签: c# .net-core nuget-package