You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:25:36