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

如何在Azure DevOps Pipeline中更新C++项目程序集版本

C++ 项目 Azure DevOps 构建自动更新.rc文件版本方案

不用安装任何第三方扩展,直接用Pipeline原生能力就能实现,稳定性远高于第三方插件,不会出现兼容失效问题。

实现步骤

  • 第一步:配置版本生成规则
    在Pipeline的变量配置页自定义版本规则,通用配置是固定主、次版本号,后两位用Azure DevOps自带的构建ID、构建计数自动生成,比如1.1.$(Build.BuildId).0,可以根据自己的版本命名要求调整。
  • 第二步:添加预处理脚本任务
    在C++项目编译任务(MSBuild/VSBuild)之前,加一个内联PowerShell任务,脚本通过正则匹配替换.rc文件里的版本字段,不依赖固定行号,后续rc文件新增其他内容也不会导致替换失效。
    内联脚本内容如下,记得把脚本里的rc文件路径改成你项目里的实际路径:
    # 替换为你的.rc文件在仓库中的相对路径
    $rcPath = "$(Build.SourcesDirectory)/src/MyApp/MyApp.rc"
    # 拼接生成新版本号,可自行调整规则
    $targetVersion = "1.1.$(Build.BuildId).0"
    
    # 读取rc文件原始内容
    $fileContent = Get-Content $rcPath -Raw
    
    # 替换字符串块里带引号的FileVersion、ProductVersion字段
    $fileContent = $fileContent -replace '(VALUE\s+"FileVersion",\s+")([\d\.]+)(")', "`$1$targetVersion`$3"
    $fileContent = $fileContent -replace '(VALUE\s+"ProductVersion",\s+")([\d\.]+)(")', "`$1$targetVersion`$3"
    
    # 标准rc文件头部还有不带引号的数值型版本定义,如果你文件里有这两个字段,取消下面两行注释同步替换
    # $numericVersion = $targetVersion.Replace('.', ',')
    # $fileContent = $fileContent -replace '(FILEVERSION\s+)([\d,]+)', "`$1$numericVersion"
    # $fileContent = $fileContent -replace '(PRODUCTVERSION\s+)([\d,]+)', "`$1$numericVersion"
    
    # 写回修改后的内容
    Set-Content $rcPath -Value $fileContent -NoNewline
    
  • 第三步:正常执行编译任务
    脚本跑完后再执行原来的C++编译流程即可,编译出来的exe/dll文件版本会自动使用新生成的版本号。

注意事项

  • 脚本默认用UTF-8编码写回,如果你的rc文件是GBK/UTF-16编码,给Set-Content加-Encoding参数指定对应编码就行,避免编译时出现编码错误。
  • 本地用Visual Studio开发构建时,这个Pipeline脚本不会运行,rc文件里保留你原来配置的默认版本,不影响本地开发调试。
  • 你之前用的第三方版本插件大多是为C#项目的AssemblyInfo文件设计,对C++ .rc文件的格式、编码适配很差,很容易出现匹配不到字段、改坏文件格式的问题,原生脚本完全可控,没有这类兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:45:31