You need to enable JavaScript to run this app. 如何通过脚本或命令行编辑.rc资源文件实现Jenkins构建版本自动更新
优惠活动
大模型
产品
解决方案
定价
更多

如何通过脚本或命令行编辑.rc资源文件实现Jenkins构建版本自动更新

适配Jenkins自动化构建的.rc文件版本更新实现方案

零额外依赖的原生实现方式

你完全不需要找专门的复杂工具:.rc文件本质是纯文本格式,你现有流程里已经在跑的命令行脚本(PowerShell、Python、Batch)就能直接完成版本字段替换,完全支持命令行调用,能直接嵌到Jenkins的流水线步骤里。

  • 核心替换逻辑就是通过正则匹配.rc里固定格式的版本字段,把旧版本值替换成你流水线传入的新版本号即可
  • 常见需要替换的固定字段包括:
    • FILEVERSION、PRODUCTVERSION 宏定义对应的逗号分隔数字串(比如 1,0,0,1)
    • 版本资源块里的 VALUE "FileVersion", "1.0.0.1"、VALUE "ProductVersion", "1.0.0.1" 字符串值
  • 可直接复用的PowerShell调用示例(完全适配Jenkins无头运行模式):
    # 从Jenkins流水线参数获取版本号,无需人工交互
    $buildVersion = $env:BUILD_VERSION
    $commaVersion = $buildVersion -replace '\.', ','
    # 读取RC源文件
    $rcText = Get-Content -Path "YourProject.rc" -Raw
    # 逐字段替换版本信息
    $rcText = $rcText -replace 'FILEVERSION\s+\d+(,\d+){3}', "FILEVERSION $commaVersion"
    $rcText = $rcText -replace 'PRODUCTVERSION\s+\d+(,\d+){3}', "PRODUCTVERSION $commaVersion"
    $rcText = $rcText -replace '(VALUE\s+"FileVersion",\s+")[\d\.]+(")', "`${1}$buildVersion`$2"
    $rcText = $rcText -replace '(VALUE\s+"ProductVersion",\s+")[\d\.]+(")', "`${1}$buildVersion`$2"
    # 写回替换后的内容,保留原文件编码
    Set-Content -Path "YourProject.rc" -Value $rcText -NoNewline
    
  • 注意提前确认团队的.rc文件格式:如果文件是UTF-16编码,读取和写入时要显式指定编码参数,避免正则匹配失效,同时要避开注释段里的同名字符串误替换。

专门支持命令行的RC编辑工具选项

如果不想自己写正则替换逻辑,也可以选现成的命令行工具:

  • rc.exe(Windows SDK 自带的资源编译器)
    你编译C++ Windows程序本来就会调用这个工具,它支持在编译阶段通过 /d 参数传入宏定义,不需要提前修改.rc源文件内容:只要在.rc里把硬编码的版本号替换成宏占位符,编译时直接把新版本号当宏值传入,就能生成带正确版本信息的资源文件,完全和现有编译流程打通,不会出现文本替换改坏.rc格式的问题。
  • Resource Hacker 命令行模式
    支持纯命令行调用,既可以编辑源端的.rc文件内容,也可以在构建完EXE/DLL之后,直接替换二进制文件里的版本资源段,非常适合需要后置打版本的构建场景。

Jenkins流程适配提醒

  • 所有版本号要通过Jenkins流水线参数显式传入,不要保留原脚本的交互弹窗输入逻辑,否则无头运行的Jenkins会卡在交互环节
  • 替换完成后加1行简单校验逻辑:读取修改后的.rc文件,确认新的版本字符串确实存在,避免因为编码、格式问题导致的静默失败
  • 可以把Jenkins构建号、代码分支名自动拼接到版本号字段,进一步减少人工输入的步骤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 15:06:07