使用dotnet pack时出现PackageVersion无效错误该如何解决
dotnet pack 预发布版本号带前导零打包失败问题说明及修复方案
这是旧版 .NET SDK 绑定的 NuGet 组件的已知问题,你遇到的外层 MSB4018 是任务执行失败的通用报错,底层对应 NU5024 校验错误。
早期 NuGet 的 SemVer 校验逻辑存在实现限制,会拦截所有预发布段中纯数字标识符带前导零的版本号,即使你确认版本号符合 SemVer 规范也会被判定为非法。
修复方案
- 方案1:升级 .NET SDK
该问题在 .NET SDK 6.0.100 及以上版本已完成修复,升级到对应版本后即可正常打包。 - 方案2:添加项目配置跳过校验
如果暂时无法升级SDK,可在项目.csproj文件的<PropertyGroup>节点中添加以下配置,关闭预发布段前导零校验:<NoErrorOnZeroPaddingVersion>true</NoErrorOnZeroPaddingVersion> - 方案3:调整版本号格式兼容旧版本
你可以在作为Git哈希的数字段前添加一个非数字前缀(业界常用g代表Git提交),将版本号调整为1.0.8-INF-2382.9.g088820。此时该标识符不再是纯数字格式,不会触发前导零校验,同时完整保留了原Git哈希信息,不需要修改哈希本身。
内容的提问来源于stack exchange,提问作者David Gard
相关产品推荐
相关产品推荐

