成功构建包后try 发布包时出现以下错误.

/usr/share/dotnet/sdk/8.0.204/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.GenerateAssemblyInfo.targets(226,5): error NETSDK1018: Invalid NuGet version string: '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

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

推荐答案

您当前使用提交哈希作为预发布指示符.据官方SemVer documentation

数字[预发布]标识符不得包括前置零.

到目前为止,这种方法有效的原因是,只有少量提交哈希(约6%)以前置零开始,甚至更少的提交哈希(约2%用于缩短哈希)仅包含数字(没有十六进制数字a-f).你的提交哈希基本上很不幸,命中率约为0.15%.

这意味着您有三个基本 Select :

  1. 通过使用完整的40个字符的提交哈希CI_COMMIT_SHA而不是缩短的提交哈希,减少提交哈希中没有字母的可能性.这将无效版本的可能性降低到约4 * 10- 10或约20亿分之1.

  2. 使您的预发布标识符为非数字.在提交哈希之前或之后添加某种标识符.甚至可以用连字符分隔,例如1.0.0-sha-061813901.0.0-06181390-git

  3. 实际上使用正确的语义版本化.按照SemVer

    构建元数据可以通过在补丁或预发布版本之后立即添加一个正号和一系列以点分隔的标识符来表示.

    所以您的版本实际上应该是这样的:1.0.0+06181390

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

Csharp相关问答推荐

我如何才能获得被嘲笑班级的私有成员?

自定义JsonEditor,用于将SON序列化为抽象类

ASP.NET Core -是否可以对所有最小API端点应用过滤器?

为什么在GuardationRule的收件箱函数中,decode.TryParse(valueString,out valueParsed)在给出1.0.1时返回true?

如何在C#中删除一个特殊字符,如"使用Regex"

ASP.NET Core 8.0 JWT验证问题:尽管令牌有效,但SecurityTokenNoExpirationError异常

AsNoTrackingWithIdentitySolutions()似乎不起作用?

(乌龙)1&#比c#中的UL&#慢吗?

限制特定REST API不被访问,但部署代码

使用预定义对象减少Task.Run/Factory.StartNew中的关闭开销

如何注册类使用多级继承与接口

使用泛型可空类实现接口

C#中Java算法的类似功能

Selify只更改第一个下拉菜单,然后忽略REST-C#

在DoubleClick上交换DataGridViewImageColumn的图像和工具提示

如何在不复制或使用输出的情况下定义项目依赖

.NET 8在appsettings.json中核心使用词典URI、URI&>

如何在使用Google.Drive.apis.V3下载文件/文件夹之前压缩?

在ObservableCollection上使用[NotifyPropertyChangedFor()]源代码生成器不会更新UI

如何在特定时间间隔运行多个后台任务?