如何在VSTS编译时自动修改ASP.NET Core 2.0 Web应用版本号
解决ASP.NET Core 2.0在VSTS编译时动态设置版本号为1.0.0.$Build.Id的问题
我明白你的困扰——之前用Update Assembly Info VSTS扩展没效果,是因为ASP.NET Core 2.0的版本管理逻辑和传统.NET Framework不一样,它不再依赖AssemblyInfo.cs,而是直接在csproj文件里通过<Version>标签控制版本。下面给你几个可行的方案:
方案一:直接在DotNetCoreCLI编译任务中传入版本参数
这是最简洁的方法,不需要修改csproj的原有结构:
- 打开你的VSTS Pipeline,找到编译项目的DotNetCoreCLI任务(如果用的是MSBuild任务也适用)
- 在任务的Arguments输入框中添加版本参数:
这里的/p:Version=1.0.0.$(Build.BuildId)$(Build.BuildId)是VSTS内置的系统变量,会自动替换为当前构建的唯一ID。 - 保存并运行Pipeline,编译后的程序集版本就会变成
1.0.0.xxx(xxx为BuildId数值)
方案二:用PowerShell脚本动态修改csproj文件
如果你需要提前修改csproj里的版本号(比如后续有其他任务依赖这个版本值),可以用PowerShell脚本实现:
- 在Pipeline中添加一个PowerShell任务,放在编译任务之前
- 输入以下脚本(记得替换
YourProjectPath/YourProject.csproj为你实际的项目路径):# 定义项目路径和目标版本号 $csprojFilePath = "$(Build.SourcesDirectory)/YourProjectPath/YourProject.csproj" $targetVersion = "1.0.0.$($env:BUILD_BUILDID)" # 读取并替换csproj中的Version标签 (Get-Content $csprojFilePath) -replace '<Version>.*?</Version>', "<Version>$targetVersion</Version>" | Set-Content $csprojFilePath - 运行Pipeline后,csproj里的版本号会被替换成目标格式,后续编译任务会自动使用这个版本
额外说明
- 如果你需要同时设置文件版本(FileVersion),可以在csproj的
<PropertyGroup>里添加:
这样编译后程序集的文件版本会和产品版本保持一致<FileVersion>$(Version)</FileVersion> - 之前的Update Assembly Info扩展无效,是因为它专门针对传统.NET项目的AssemblyInfo.cs文件,而ASP.NET Core 2.0已经把版本配置移到了csproj中,所以这个扩展无法生效
内容的提问来源于stack exchange,提问作者Anakin8526
相关产品推荐
相关产品推荐

