"最近-胜"依赖解析和向后兼容性

时间:2015-07-28 05:49:34

标签: nuget visual-studio-2015 asp.net-core .net-4.6

当引用this ASP.NET github wiki page时,它解释了如何使用"最近的胜利"来丢弃相同名称(但不同版本)的包。情形:

  

最近的胜利意味着依赖性解析器更喜欢那些版本   是"更近"应用程序,但只有它们是它的祖先   依赖被拒绝。

给出的示例解释了下图中的Package B 1.0将被丢弃,因为Package B 2.0是"更近":

Nearest-Wins dependency resolution

这是否意味着Package A现在将使用Package B 2.0?当然,除非Package B 2.0Package B 1.0向后兼容,否则这没有意义吗?

根据semantic versioning,上述套餐不一定向后兼容。

1 个答案:

答案 0 :(得分:2)

这意味着MyApp将使用PackageB 2.0,这也意味着MyApp上下文中的packageA将使用PackageB 2.0。请注意,在包图中始终只有任何单个包的单个版本,这对于package.config世界来说是正确的,并且此处没有任何更改。在packages.config世界中,用户在包安装时做出了决定,这里决定是在恢复时做出的。

由于始终是MyApp的用户或作者在project.json或nuspec中创建依赖图(如果MyApp也是一个包),他有权选择要使用的版本。< / p>

在这种情况下,根据语义版本控制规则,存在潜在的重大变化。在这个样本中,作者认为它不会影响它的应用程序,或者用你的话来说它是向后兼容的,足以供他使用。

要记住该规则适用的另一个重要方面,因为作者MyApp有权进行更改,而不是因为Package B2.0任意接近图中的根。查看表兄依赖规则,了解这种边缘情况。

最后一个问题引用的文档不是官方指南 - 可以在这里找到 - https://docs.microsoft.com/en-us/nuget/consume-packages/dependency-resolution