更新同版本号的Nuget包

问题描述 投票:0回答:4

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

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

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

.net asp.net-core nuget nuget-package .net-standard
4个回答
19
投票

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


6
投票

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

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

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

<Version>1.0.0</Version>

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


2
投票

在 Nuget 世界中没有直观的方法来做到这一点。

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


0
投票

对于仍在寻找方法的人来说,最适合我的解决方案是清除 NuGet 缓存。

  1. “工具”->“NuGet 包管理器”->“包管理器设置”菜单。
  2. 单击“清除所有 NuGet 缓存”按钮
  3. 重建您的解决方案

© www.soinside.com 2019 - 2024. All rights reserved.