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

如何在C#(.NET6)中自动递增程序集版本号?已尝试方案无效

.NET6+ 实现程序集版本号自动递增的可行方案

针对.NET6及之后SDK风格项目(默认无AssemblyInfo.cs)的版本号自动递增需求,给你几个实测有效的方案,避开常见坑:

方案一:直接用项目文件的Version属性通配符

这是最简便的原生方案,如果你之前试了没生效,大概率是配置冲突:

  • 打开项目的.csproj文件,添加或修改如下配置:
    <PropertyGroup>
      <!-- 第三部分为自2000年1月1日起的天数,第四部分为当天秒数/2 -->
      <Version>1.0.*</Version>
      <!-- 若需要AssemblyVersion和FileVersion同步,可直接用Version属性,默认会自动关联 -->
      <!-- 也可以单独指定AssemblyVersion:<AssemblyVersion>1.0.*</AssemblyVersion> -->
    </PropertyGroup>
    
  • 注意事项:
    1. 不要手动保留旧的AssemblyInfo.cs文件里的[assembly: AssemblyVersion]或[assembly: FileVersion]属性,否则会覆盖.csproj的配置,直接删掉这些行或者删除整个AssemblyInfo.cs(SDK会自动生成)。
    2. 若项目里显式设置了<GenerateAssemblyInfo>false</GenerateAssemblyInfo>,需要改成true(默认就是true,除非你手动改了)。

方案二:全局配置(多项目解决方案适用)

如果你的解决方案有多个项目,不想逐个配置,在解决方案根目录新建Directory.Build.props文件,内容如下:

<Project>
  <PropertyGroup>
    <Version>1.0.*</Version>
  </PropertyGroup>
</Project>

所有子项目会自动继承这个版本配置,统一管理更省心。

方案三:自定义MSBuild任务实现灵活版本规则

如果原生通配符的规则不符合你的需求(比如要按构建次数、自定义序列生成),可以自定义MSBuild目标:
比如在.csproj里添加以下配置,实现按「年.月.日.时分」生成版本号:

<Target Name="SetCustomVersion" BeforeTargets="CoreCompile">
  <PropertyGroup>
    <Major>$([System.DateTime]::Now.Year)</Major>
    <Minor>$([System.DateTime]::Now.Month)</Minor>
    <Build>$([System.DateTime]::Now.Day)</Build>
    <Revision>$([System.DateTime]::Now.Hour * 100 + [System.DateTime]::Now.Minute)</Revision>
    <Version>$(Major).$(Minor).$(Build).$(Revision)</Version>
    <AssemblyVersion>$(Major).$(Minor).$(Build).$(Revision)</AssemblyVersion>
  </PropertyGroup>
</Target>

你可以根据需求修改逻辑,比如读取存储构建次数的文本文件,每次递增后写入,实现严格的自增序列。

验证版本是否生效

在代码里加一行测试代码,运行后查看输出:

using System.Reflection;

var version = Assembly.GetExecutingAssembly().GetName().Version;
Console.WriteLine($"当前版本:{version}");

或者右键生成的exe/dll文件,查看「详细信息」里的版本号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:45:34