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

如何仅用MS Build语法在.NET Core csproj中递增NuGet PackageVersion?

在.NET Core项目中通过csproj Target自动递增NuGet PackageVersion

不用再依赖PowerShell脚本,直接在.csproj文件中通过MSBuild Target/Task就能实现PackageVersion的自动递增,以下是具体实现方案:

1. 基础版本配置

先在项目文件中定义基础版本属性,后续Target会基于此进行递增:

<PropertyGroup>
  <!-- 定义基础版本格式:主版本.次版本.修订号 -->
  <VersionPrefix>1.0.0</VersionPrefix>
  <!-- 初始PackageVersion,会被后续Target覆盖 -->
  <PackageVersion>$(VersionPrefix)</PackageVersion>
</PropertyGroup>

2. 添加自动递增版本的Target

在.csproj中插入自定义Target,确保在构建前执行版本递增逻辑:

<Target Name="IncrementPackageVersion" BeforeTargets="BeforeBuild">
  <!-- 解析当前VersionPrefix,拆分版本号各部分 -->
  <PropertyGroup>
    <ParsedVersion>$([System.Version]::Parse($(VersionPrefix)))</ParsedVersion>
    <!-- 递增修订号 -->
    <NewRevision>$([System.Math]::Add($(ParsedVersion.Revision), 1))</NewRevision>
    <!-- 拼接新的版本前缀 -->
    <NewVersionPrefix>$(ParsedVersion.Major).$(ParsedVersion.Minor).$(NewRevision)</NewVersionPrefix>
  </PropertyGroup>

  <!-- 更新项目的版本属性 -->
  <PropertyGroup>
    <VersionPrefix>$(NewVersionPrefix)</VersionPrefix>
    <PackageVersion>$(NewVersionPrefix)</PackageVersion>
  </PropertyGroup>

  <!-- 可选:将更新后的版本号写入项目文件,下次构建沿用(若不需要永久保存可删除此段) -->
  <WriteLinesToFile File="$(MSBuildProjectFile)"
                    Lines="<PropertyGroup>&#xD;&#xA;  &lt;VersionPrefix&gt;$(NewVersionPrefix)&lt;/VersionPrefix&gt;&#xD;&#xA;&lt;/PropertyGroup&gt;"
                    Overwrite="false"
                    Encoding="UTF-8"
                    InsertAt="Beginning" />
</Target>

关键逻辑说明

  • BeforeTargets="BeforeBuild":保证版本递增操作在项目构建前完成
  • 利用MSBuild内置的System.Version和System.Math类解析、递增版本号,无需额外依赖
  • WriteLinesToFile段用于永久保存递增后的版本,若只需要本次构建生效,可直接删除该部分

3. 自定义递增规则(进阶)

如果需要按日期生成版本,或者递增主/次版本,可修改Target逻辑,示例如下:

按日期生成版本号

<Target Name="IncrementPackageVersionByDate" BeforeTargets="BeforeBuild">
  <PropertyGroup>
    <CurrentYear>$([System.DateTime]::Now.Year)</CurrentYear>
    <CurrentMonth>$([System.DateTime]::Now.Month.ToString("D2"))</CurrentMonth>
    <CurrentDay>$([System.DateTime]::Now.Day.ToString("D2"))</CurrentDay>
    <BuildSerial>$([System.DateTime]::Now.Hour.ToString("D2"))$([System.DateTime]::Now.Minute.ToString("D2"))</BuildSerial>
    <PackageVersion>$(CurrentYear).$(CurrentMonth).$(CurrentDay).$(BuildSerial)</PackageVersion>
  </PropertyGroup>
</Target>

仅在Release构建时递增

<Target Name="IncrementPackageVersion" BeforeTargets="BeforeBuild" Condition="'$(Configuration)' == 'Release'">
  <!-- 内容同基础版本递增逻辑 -->
</Target>

注意事项

  • 要求项目基于.NET Core 3.0及以上版本,确保MSBuild支持这些内联函数
  • 若使用WriteLinesToFile,项目文件会被修改,建议将其纳入版本控制
  • 若团队协作开发,需确认所有成员的构建环境均支持该MSBuild语法

内容的提问来源于stack exchange,提问作者Robin Johnson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:18:24