当引用this ASP.NET github wiki page时,它解释了如何使用"最近的胜利"来丢弃相同名称(但不同版本)的包。情形:
最近的胜利意味着依赖性解析器更喜欢那些版本 是"更近"应用程序,但只有它们是它的祖先 依赖被拒绝。
给出的示例解释了下图中的Package B 1.0
将被丢弃,因为Package B 2.0
是"更近":
这是否意味着Package A
现在将使用Package B 2.0
?当然,除非Package B 2.0
与Package B 1.0
向后兼容,否则这没有意义吗?
根据semantic versioning,上述套餐不一定向后兼容。
答案 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