.NET 4.8下ASP.NET WebForms应用如何添加自动递增版本号?
为ASP.NET Web Forms应用配置发布时自动递增版本号
下面介绍几种实用方法,实现每次发布时自动递增版本号(非源代码版本控制范畴):
方法1:用AssemblyInfo.cs通配符快速实现自动递增
Web Forms项目的Properties/AssemblyInfo.cs是控制程序集版本的核心文件,默认版本为固定值:
[assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")]
把修订号/构建号改成*,就能让版本在每次编译(发布必然触发编译)时自动递增:
// 程序集版本格式:主版本.次版本.构建号.修订号 // *会自动生成:构建号=当前日期距2000年1月1日的天数;修订号=当天秒数/2 [assembly: AssemblyVersion("1.0.*")] // 文件版本也可以同步用通配符,或者单独指定规则 [assembly: AssemblyFileVersion("1.0.*")]
⚠️ 注意:这种方式每次编译都会递增,包括本地调试编译。如果只想在发布时递增,需要配合Release配置区分编译行为。
方法2:自定义MSBuild脚本,实现发布专属的版本递增
如果需要更精准的控制(比如只在Release发布时递增,固定主/次版本,只升修订号),可以修改项目的.csproj文件:
- 右键项目→选择「编辑项目文件」,打开
.csproj - 在
<Project>节点内添加以下脚本:
<PropertyGroup> <!-- 自定义初始版本,按需修改主、次版本号 --> <MajorVersion>1</MajorVersion> <MinorVersion>0</MinorVersion> <BuildVersion>0</BuildVersion> <!-- 用来存储修订号的文件,先在解决方案根目录建一个RevisionNumber.txt,初始值写0 --> <RevisionFile>$(SolutionDir)RevisionNumber.txt</RevisionFile> </PropertyGroup> <Target Name="IncrementRevision" BeforeTargets="Build" Condition="'$(Configuration)' == 'Release'"> <!-- 读取当前修订号 --> <ReadLinesFromFile File="$(RevisionFile)"> <Output TaskParameter="Lines" ItemName="RevisionNumber" /> </ReadLinesFromFile> <!-- 递增修订号 --> <PropertyGroup> <CurrentRevision>$([System.Int32]::Parse($(RevisionNumber)))</CurrentRevision> <NewRevision>$([System.Int32]::Add($(CurrentRevision), 1))</NewRevision> </PropertyGroup> <!-- 把新修订号写回文件 --> <WriteLinesToFile File="$(RevisionFile)" Lines="$(NewRevision)" Overwrite="true" /> <!-- 设置最终的程序集和文件版本 --> <PropertyGroup> <AssemblyVersion>$(MajorVersion).$(MinorVersion).$(BuildVersion).$(NewRevision)</AssemblyVersion> <AssemblyFileVersion>$(MajorVersion).$(MinorVersion).$(BuildVersion).$(NewRevision)</AssemblyFileVersion> </PropertyGroup> </Target>
- 确保解决方案根目录有
RevisionNumber.txt文件,初始值设为0 - 发布时选择Release配置,这样只有发布(触发Release编译)时才会递增修订号,本地Debug编译不会受影响。
方法3:结合Visual Studio发布管道动态设置版本
如果用Visual Studio自带的发布工具(比如发布到IIS、Azure),可以通过发布配置或管道变量动态赋值版本号:
- 右键项目→选择「发布」,打开发布配置面板
- 切换到「设置」选项卡,勾选「启用预编译」
- 点击「配置预编译设置」,选择「所有输出文件的单个程序集」,然后在「版本」输入框中:
- 若用Azure DevOps发布,直接用管道变量
$(Build.BuildNumber)自动填充版本号 - 本地发布的话,可以写个简单的PowerShell脚本,在发布前自动修改
AssemblyInfo.cs里的版本号(比如读取上次版本,递增后替换)
- 若用Azure DevOps发布,直接用管道变量
验证版本是否生效
发布后可以通过两种方式确认版本号:
- 找到发布目录
bin下的程序集(.dll文件),右键→属性→详细信息,查看「文件版本」和「产品版本」 - 在Web页面中添加代码显示版本:
// 在页面后台的Page_Load方法中 protected void Page_Load(object sender, EventArgs e) { var assemblyVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; lblVersion.Text = $"当前应用版本:{assemblyVersion.Major}.{assemblyVersion.Minor}.{assemblyVersion.Build}.{assemblyVersion.Revision}"; }
内容的提问来源于stack exchange,提问作者Tech with Thiru
相关产品推荐
相关产品推荐

