从基于日期的版本控制切换到语义版本控制后,如何防止NuGet升级包

本文关键字:版本控制 语义 何防止 NuGet 于日期 日期 | 更新日期: 2023-09-27 18:29:43

我们最近开始使用我们自己的内部NuGet服务器来容纳我们许多内部项目通用的包。最初,我们工作的每个项目都有版本,版本号为:

[Year].[Month].[Day].[DailyBuildCount]

然而,在升级到.NET 4的过程中,我们决定从v4.x开始使用SemVer对软件包进行版本控制。问题是NuGet将v4.x版本视为OLDER,而不是使用日期格式进行版本控制的版本。此外,引用v4.x版本的项目认为他们需要升级到具有日期格式的版本,这些版本甚至不针对同一框架版本。

是否有某种方法可以配置NuGet,使包升级不能跨越这些版本控制线

对于包间依赖项,我们为它们配置了特定的版本依赖项,这样依赖项本身就可以正常工作。这是主要的项目参考,即"升级"可能会意外发生在旧版本上的问题。

从基于日期的版本控制切换到语义版本控制后,如何防止NuGet升级包

顺便说一下,我认为您最好的选择是稍微重命名这些包。这将导致它们被视为完全独立的包,并完全打破版本链。

我有三篇博客文章可以帮助你:

  • 使用NuGet和Powershell执行安全更新
  • 使用预发布包的NuGet和Powershell执行安全更新
  • 强制执行jQuery NuGet包版本并降级jQuery

最后一个链接显示了如何将版本强制到特定范围的示例(在本例中为jQuery,但可以应用于任何包)。这将确保在发出"更新包"命令时,仅使用版本介于次要值和主要值之间的引用来更新项目)。

然而,在您的情况下,最好的解决方案可能是像Eric Lloyd之前建议的那样,完全打破依赖链,以保持干净的依赖结构。