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

使用GitVersion.MsBuild与dotnet pack制作NuGet包:时间戳后缀控制及自定义

GitVersion控制NuGet包时间戳后缀的逻辑与配置方法

时间戳的来源

这个时间戳后缀是GitVersion.MsBuild控制的,和dotnet pack无关。GitVersion会根据Git仓库的分支、标签状态自动生成语义化版本号:

  • 特性分支或master分支构建时,GitVersion默认生成预发布版本,其中包含分支名+时间戳作为预发布后缀;
  • Git标签构建时,GitVersion会将标签作为正式版本号,不会生成预发布后缀,因此包名没有时间戳。

强制移除时间戳后缀

1. 通过GitVersion.yml全局配置

在项目根目录创建/修改GitVersion.yml,指定所有分支的预发布标签不包含时间戳:

# 全局禁用预发布时间戳
pre-release-tag: ''
# 或者针对特定分支单独配置
branches:
  master:
    pre-release-tag: ''
  feature:
    pre-release-tag: '{BranchName}' # 只保留分支名,去掉时间戳

2. 通过CSPROJ固定版本号

直接在项目的.csproj文件中指定固定版本,跳过GitVersion的动态生成:

<PropertyGroup>
  <!-- 自定义版本号,无时间戳 -->
  <Version>6.0.3-mybranchname</Version>
</PropertyGroup>

3. 命令行参数覆盖版本

执行dotnet pack时直接通过参数指定版本:

dotnet pack /p:Version=6.0.3-mybranchname

强制添加时间戳后缀

1. 通过GitVersion.yml修改标签分支规则

即使在Git标签构建时,也强制生成带时间戳的预发布版本:

branches:
  tag:
    # 自定义预发布标签格式,包含时间戳
    pre-release-tag: 'ci.{ShortSha}.{DateTime:yyyyMMddHHmmss}'

生成的版本号类似6.0.3-ci.abc123.20230324152546,对应包名会带时间戳。

2. 通过CSPROJ动态拼接版本

在.csproj中结合GitVersion生成的变量,自动拼接时间戳:

<PropertyGroup>
  <!-- 基于GitVersion生成的正式版本,追加时间戳 -->
  <Version>$(GitVersion_SemVer)-$(DateTime:yyyyMMddHHmmss)</Version>
</PropertyGroup>

确保GitVersion.MsBuild已经完成执行,能正确注入GitVersion_SemVer变量。

3. 命令行动态生成版本

在shell环境中(如GitHub Actions),通过命令拼接版本号:

# Linux/macOS环境
dotnet pack /p:Version=$(dotnet gitversion /showvariable SemVer)-$(date +%Y%m%d%H%M%S)

# Windows PowerShell环境
dotnet pack /p:Version="$(& dotnet gitversion /showvariable SemVer)-$(Get-Date -Format 'yyyyMMddHHmmss')"

内容的提问来源于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 14:22:23