nuget - "Nearest-Wins"依赖解析和向后兼容性

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

当提到 this ASP.NET github wiki page ,它解释了如何使用“Nearest Win”方案丢弃同名(但不同版本)的包:

Nearest wins means that the dependency resolver prefers versions that are "closer" to the application, but only if they are an ancestor of the dependency being rejected.



给出的例子解释了下图中如何,Package B 1.0将被丢弃,因为 Package B 2.0是“更接近”:

Nearest-Wins dependency resolution

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

据此semantic versioning上述软件包不一定向后兼容。

最佳答案

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

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

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

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

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

关于nuget - "Nearest-Wins"依赖解析和向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31668284/

相关文章:

c# - 为什么 C# 引用在 NuGet 和 Visual Studio 之间添加不同

nuget - TeamCity Nuget 安装程序步骤失败,提示无法找到 NuGet 可执行文件

visual-studio - SecureNuGetPackageBuildImports目标是什么?

c# - Teamcity 无法通过 nuget 安装软件包

c++ - 无法实现接口(interface)的 [[deprecated]] 方法

c# - 消除 C# 代码中过多的空格和新行

c# - 将 Entity Framework 数据转换为 json 时出现 502 错误。可能的递归。如何预防?

c# - 使用 CookieAuthentication 的 ASP.NET 5 Identity 3.0 可扩展性

visual-studio-2015 - 是否可以在 Visual Studio 2015 社区版中导入 .publishsettings 文件?

vNext 中静态 HTML 的 CORS