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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:44:51