使用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
相关产品推荐
相关产品推荐

