如何在.NET流水线中用MSBuild为版本追加GitLab流水线ID
解决方案
直接指定版本(固定基础版本场景)
如果你的基础版本(如示例中的1.0.1)是固定值,直接在GitLab流水线的MSBuild命令行中拼接流水线ID即可:
# Bash 环境 msbuild YourProject.csproj \ /p:AssemblyVersion="1.0.1.$CI_PIPELINE_IID" \ /p:AssemblyFileVersion="1.0.1.$CI_PIPELINE_IID" \ /p:AssemblyInformationalVersion="1.0.1.$CI_PIPELINE_IID" \ /p:Configuration=Release
# Windows CMD 环境 msbuild YourProject.csproj ^ /p:AssemblyVersion="1.0.1.%CI_PIPELINE_IID%" ^ /p:AssemblyFileVersion="1.0.1.%CI_PIPELINE_IID%" ^ /p:AssemblyInformationalVersion="1.0.1.%CI_PIPELINE_IID%" ^ /p:Configuration=Release
动态提取基础版本(通用场景)
如果基础版本会变动,先从AssemblyInfo.Version.cs中提取前三位版本号,再拼接流水线ID:
# Bash 环境 ORIGINAL_VERSION=$(grep -oP 'AssemblyVersion\("\K[0-9]+\.[0-9]+\.[0-9]+' AssemblyInfo.Version.cs) NEW_VERSION="$ORIGINAL_VERSION.$CI_PIPELINE_IID" msbuild YourProject.csproj \ /p:AssemblyVersion="$NEW_VERSION" \ /p:AssemblyFileVersion="$NEW_VERSION" \ /p:AssemblyInformationalVersion="$NEW_VERSION" \ /p:Configuration=Release
原理说明
MSBuild编译时会优先使用命令行通过/p参数传递的属性值,直接覆盖AssemblyInfo.Version.cs中定义的版本字段,无需修改原文件,也不需要导入额外的MSBuild目标文件,完全符合需求。
内容的提问来源于stack exchange,提问作者Martin Teichler
相关产品推荐
相关产品推荐

