CI/CD 中的 Nuget 包版本无效

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

成功构建包后尝试发布包时,我们收到以下错误。

/usr/share/dotnet/sdk/8.0.204/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.GenerateAssemblyInfo.targets(226,5):错误NETSDK1018:无效的NuGet版本字符串:'1.0.0- 06181390'。 [/app_build/OurProject/OurSolution/OurSolution.csproj]

1.0.0-06181390
是我们在构建它并通过 GitLab 管道发布它时使用
/p:Version=$VERSION
变量提供的版本。基本上,我们在版本末尾使用
CI_COMMIT_SHORT_SHA
,例如
1.0.0-$CI_COMMIT_SHORT_SHA

几天前它还运行良好,但现在我们得到了这个。对于理解为什么会发生突然的变化有什么帮助吗?

c# .net nuget gitlab-ci versioning
1个回答
4
投票

您当前使用提交哈希作为预发布指示器。根据官方SemVer文档

数字[预发布]标识符不得包含前导零。

到目前为止,这种方法有效的原因是,只有少量提交哈希值(约 6%)以前导零开头,甚至更少量(约 2% 的缩短哈希值)仅包含数字(没有十六进制数字

a-f 
)。基本上,你的提交哈希非常不走运,命中率约为 0.15%。

这意味着您有三个基本选择:

  1. 通过使用完整的 40 个字符提交哈希

    CI_COMMIT_SHA
    而不是缩短的提交哈希,降低提交哈希中没有字母的可能性。这将无效版本的概率降低到大约 4 * 10-10 或大约 20 亿分之一。

  2. 将预发布标识符设置为非数字。在提交哈希之前或之后添加某种标识符。它甚至可以用连字符分隔,例如

    1.0.0-sha-06181390
    1.0.0-06181390-git

  3. 实际使用正确的语义版本控制。根据SemVer

    构建元数据可以通过紧跟补丁或预发布版本后附加加号和一系列点分隔的标识符来表示。

    所以你的版本实际上应该是这样的:

    1.0.0+06181390

我强烈建议使用第三个选项,因为这是唯一使用正确版本控制的选项。

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