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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:26:03