Nuget &引用;“最近的胜利”;依赖解析和向后兼容性

Nuget &引用;“最近的胜利”;依赖解析和向后兼容性,nuget,visual-studio-2015,asp.net-core,.net-4.6,Nuget,Visual Studio 2015,Asp.net Core,.net 4.6,在参考时,它解释了如何使用“最近的赢”方案丢弃相同名称(但不同版本)的包: 最近的wins意味着依赖项解析程序更喜欢 与应用程序“更接近”,但前提是它们是 正在拒绝的依赖项 给出的示例解释了在下图中,包B 1.0将被丢弃,因为包B 2.0更接近: 这是否意味着软件包A现在将使用软件包B 2.0?除非包B 2.0向后兼容包B 1.0? 因此,上述软件包不一定向后兼容。这意味着MyApp将使用PackageB 2.0,也意味着MyApp上下文中的packageA将使用PackageB 2.0。请注

在参考时,它解释了如何使用“最近的赢”方案丢弃相同名称(但不同版本)的包:

最近的wins意味着依赖项解析程序更喜欢 与应用程序“更接近”,但前提是它们是 正在拒绝的依赖项

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

这是否意味着
软件包A
现在将使用
软件包B 2.0
?除非
包B 2.0
向后兼容
包B 1.0


因此,上述软件包不一定向后兼容。

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

由于总是MyApp的用户或作者在project.json或nuspec(如果MyApp也是一个包)中创建依赖关系图,因此他有权选择使用哪个版本

您是对的,在这种情况下,根据语义版本控制规则,有一个潜在的破坏性更改。在这个示例中,作者决定它不会影响它的应用程序,或者用你的话来说,它是向后兼容的,足以供他使用

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

问题引用的最后一个文档不是官方指南-可以在这里找到-

您的意思是写“这也意味着在MyApp的上下文中packageA将使用PackageB 2.0”吗?