更新相同版本号的Nuget包

Updating Nuget Package of the Same Version Number

我正在开发一个 .net 标准 C# class 库,它会在我构建它时自动输出一个 NuGet 包。我正在使用这个带有 ASP.NET 核心应用程序的 NuGet 包。如果我每次构建时都更新 class 库的版本号,我可以使用简单的 Update-Package 命令将更改引入我的应用程序,但我不想更改版本号每次,当我做很多小的改变时。

我已经尝试在 Visual Studio 选项菜单中清除 NuGet 缓存,然后尝试使用 "dotnet restore" 以及卸载/重新安装,但不知何故它似乎仍然不断从中提取旧版本某处。

还有其他方法吗?它会从哪里提取旧版本?

在 Nuget 世界中没有直观的方法。

我通常采用的方法是将项目包含在解决方案中并对其进行处理。一旦我高兴了,我就会构建 nuget 包。

NuGet 根本不是这样工作的。版本号是幂等的,所以你不能 "replace" 一个版本;你只能增加它。这是 NuGet 遵循的 SemVer(语义版本控制)规则。规则规定:

Once a versioned package has been released, the contents of that version MUST NOT be modified. Any modifications MUST be released as a new version. (https://semver.org/#spec-item-3)

不过,有两件事可以帮助您。

  1. NuGet 雇用了 ​​SemVer,所以您也应该这样做。在开发中,您不会递增主要、次要或补丁编号 ([major].[minor].[patch])。相反,您添加一个破折号,后跟一个预发布标识符,即 1.0.0-alpha.1。这允许您在不影响您的版本号的情况下增加标识符。例如,您的下一个更改可能是 1.0.0-alpha.2,当您最终准备好发布时,您只需要使用 1.0.0.

  2. 在开发中,您不应将 NuGet 与应用程序代码一起修改。如果它们在同一个解决方案中,则不需要包引用,因为项目引用更有意义,并且不需要版本增量。如果库与您的应用程序位于不同的解决方案中,您应该只包含通过包引用,然后,您应该独立开发两者。如果这样更有意义,您也可以稍后分离项目。如果您的库不够发达,无法在不不断更改的情况下支持您的应用程序,那么请将其保留在同一个解决方案中。一旦达到稳定点,您就可以将其移至自己的解决方案(如果您愿意),并在此时更改应用中的引用。

您可以将此版本应用到您的预发布包中,以便在每个版本中获得一个包:

<Version>1.0.0-$(Configuration)-$(Platform)-$([System.DateTime]::UtcNow.ToString(yyyyMMdd-HHmmss))</Version>

然后当你发布你的包时,你改变版本:

<Version>1.0.0</Version>

你总是要升级包,但它的版本没有增加