如何用C#、GitVersion.MsBuild和dotnet pack给NuGet包添加名称后缀?
解决方法
1. 通过dotnet pack参数传递GitVersion变量
启用UseGitVersion=true后,GitVersion会完全接管版本号生成,因此--version-suffix会被忽略。你可以直接通过MSBuild参数覆盖GitVersion的预发布相关变量:
dotnet pack . \ -c:Release \ --no-build \ --no-restore \ -p:UseGitVersion=true \ -p:CIBuild=true \ -p:PackageOutputPath='${{ github.workspace }}/${{ env.nugetPackOutputDir }}' \ -v:minimal \ -p:PreReleaseLabel=${{ env.environment }} \ -p:PreReleaseTagSeparator=--
PreReleaseLabel指定预发布标签内容(即你的staging/development)PreReleaseTagSeparator设置版本号与标签的分隔符,这里用双横线满足你的命名需求
最终生成的版本号会是1.0.0--staging,对应NuGet包文件名和内嵌版本信息都会同步更新。
2. 通过GitVersion.yml配置文件设置
在项目根目录创建或修改GitVersion.yml,配置预发布标签规则并支持读取环境变量:
mode: Mainline branches: main: pre-release-label: '${env:environment}' develop: pre-release-label: '${env:environment}' pre-release-tag-separator: '--'
之后保持原dotnet pack命令(可去掉--version-suffix),只要GitHub Actions中设置了environment变量,GitVersion就会自动将其作为预发布标签生成对应版本号。
3. 直接拼接GitVersion生成的版本号
如果需要在GitVersion生成的基础版本上直接追加后缀,可通过MSBuild参数覆盖PackageVersion:
dotnet pack . \ -c:Release \ --no-build \ --no-restore \ -p:UseGitVersion=true \ -p:CIBuild=true \ -p:PackageOutputPath='${{ github.workspace }}/${{ env.nugetPackOutputDir }}' \ -v:minimal \ -p:PackageVersion='$(_GitVersion_FullSemVer)--${{ env.environment }}'
$(_GitVersion_FullSemVer)是GitVersion生成的基础语义化版本号(如1.0.0),拼接后得到最终带环境后缀的版本。
关键说明
- 启用
UseGitVersion=true时,GitVersion会自动生成Version、PackageVersion等MSBuild属性,这是--version-suffix被忽略的根本原因。 PreReleaseLabel是GitVersion的核心变量,专门用于控制预发布标签内容,支持通过环境变量或配置文件动态赋值。
内容的提问来源于stack exchange,提问作者Claus Appel
相关产品推荐
相关产品推荐

