.NET 7项目版本号自动递增方法咨询:解决通配符*禁用问题
.NET 7 实现版本号自动递增(含进位逻辑)
你的原有配置失效的核心原因是:BuildVersion 的值没有持久化存储,每次构建都会从 PropertyGroup 里的初始值 0 重新计算,导致版本号无法累计递增。以下是可行的实现方案:
步骤1:创建版本号持久化文件
在项目根目录创建 VersionInfo.props 文件,用于存储当前版本号的各个分段:
<Project> <PropertyGroup> <MajorVersion>1</MajorVersion> <MinorVersion>0</MinorVersion> <PatchVersion>0</PatchVersion> <BuildVersion>0</BuildVersion> </PropertyGroup> </Project>
步骤2:修改项目文件(.csproj)
在你的 .csproj 中导入上述文件,并编写构建任务实现版本号递增、进位逻辑:
<!-- 导入版本号配置文件 --> <Import Project="VersionInfo.props" /> <PropertyGroup> <!-- 拼接完整版本号 --> <Version>$(MajorVersion).$(MinorVersion).$(PatchVersion).$(BuildVersion)</Version> </PropertyGroup> <Target Name="IncrementVersion" BeforeTargets="PrepareForBuild"> <!-- 初始递增Build版本号 --> <PropertyGroup> <NewBuildVersion>$([MSBuild]::Add($(BuildVersion), 1))</NewBuildVersion> <NewPatchVersion>$(PatchVersion)</NewPatchVersion> </PropertyGroup> <!-- 处理Build版本号进位:当Build达到9999时,重置为0并递增Patch --> <PropertyGroup Condition="$([MSBuild]::GreaterThanOrEquals($(NewBuildVersion), 9999))"> <NewBuildVersion>0</NewBuildVersion> <NewPatchVersion>$([MSBuild]::Add($(PatchVersion), 1))</NewPatchVersion> </PropertyGroup> <!-- 可选:如需Patch版本号也支持进位,可添加以下逻辑 --> <!-- <PropertyGroup Condition="$([MSBuild]::GreaterThanOrEquals($(NewPatchVersion), 9999))"> <NewPatchVersion>0</NewPatchVersion> <NewMinorVersion>$([MSBuild]::Add($(MinorVersion), 1))</NewMinorVersion> </PropertyGroup> --> <!-- 将更新后的版本号写入持久化文件 --> <XmlPoke XmlInputPath="VersionInfo.props" Query="/Project/PropertyGroup/MajorVersion" Value="$(MajorVersion)" /> <XmlPoke XmlInputPath="VersionInfo.props" Query="/Project/PropertyGroup/MinorVersion" Value="$(MinorVersion)" /> <XmlPoke XmlInputPath="VersionInfo.props" Query="/Project/PropertyGroup/PatchVersion" Value="$(NewPatchVersion)" /> <XmlPoke XmlInputPath="VersionInfo.props" Query="/Project/PropertyGroup/BuildVersion" Value="$(NewBuildVersion)" /> <!-- 更新当前构建会话的版本号变量 --> <PropertyGroup> <PatchVersion>$(NewPatchVersion)</PatchVersion> <BuildVersion>$(NewBuildVersion)</BuildVersion> <Version>$(MajorVersion).$(MinorVersion).$(PatchVersion).$(BuildVersion)</Version> </PropertyGroup> </Target>
关键说明
- 持久化存储:通过外部文件
VersionInfo.props保存版本号,确保每次构建都能基于上一次的结果递增 - 进位逻辑:内置了Build版本号到9999时自动进位到Patch的逻辑,可按需扩展Patch到Minor的进位
- 构建时机:任务绑定到
PrepareForBuild,确保在编译前完成版本号更新 - 团队协作:将
VersionInfo.props提交到版本控制系统,保证所有成员构建时版本号统一递增
内容的提问来源于stack exchange,提问作者user21984968
相关产品推荐
相关产品推荐

