更新同版本号的Nuget包

fos*_*bie 5 .net nuget nuget-package asp.net-core .net-standard

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

我尝试清除 Visual Studio 选项菜单中的 NuGet 缓存,然后尝试使用“dotnet restore”以及卸载/重新安装,但不知何故,它似​​乎仍然从某个地方继续拉入旧版本。

有没有其他方法可以做到这一点?它会从哪里提取旧版本?

Chr*_*att 8

这根本不是 NuGet 的工作方式。版本号是幂等的,所以你不能“替换”一个版本;你只能增加它。这是NuGet 遵循的SemVer(语义版本控制)规则。该规则规定:

一旦发布了版本化软件包,不得修改该版本的内容。任何修改都必须作为新版本发布。( 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。如果它们在同一个解决方案中,则不需要包引用,因为项目引用更有意义,并且不需要版本增量。如果库与您的应用程序在不同的解决方案中,您应该只通过包引用包含,然后,您应该独立开发两者。如果这更有意义,您也可以稍后将项目分开。如果您的库不够发达,无法在不进行持续更改的情况下支持您的应用程序,请将其保留在相同的解决方案中。一旦它达到稳定点,您就可以将它移到自己的解决方案中(如果这是您喜欢的),并在那时更改您应用程序中的引用。


Tro*_*ers 6

您可以将此版本应用到预发布包中,以便为每个构建获取一个包:

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

然后,当您发布软件包时,您可以使用以下命令更改版本:

<Version>1.0.0</Version>
Run Code Online (Sandbox Code Playgroud)

您总是必须升级软件包,但它的版本不会增加