如何禁用Visual Studio中“资源脚本未使用VS创建”警告?
解决Visual Studio资源编辑器覆盖预构建钩子修改的RC版本信息问题
问题根源
Visual Studio资源编辑器对RC文件的格式有严格内部规范(包括特定注释、排版结构、标记),预构建钩子直接修改RC文件内容时,极易破坏这些规范,导致编辑器判定文件被外部修改且格式不兼容,进而触发替换提示,丢失自动递增的修订号修改。
可行解决方案
1. 用预处理器宏分离版本信息与RC文件(推荐)
避免直接修改RC文件,改用宏定义管理版本号,让预构建钩子只修改宏值:
- 修改RC文件中的版本信息段,替换为宏引用:
// 先确保RC文件顶部包含自定义头文件 #include "VersionDefs.h" FILEVERSION VER_MAJOR,VER_MINOR,VER_BUILD,VER_REVISION PRODUCTVERSION VER_MAJOR,VER_MINOR,VER_BUILD,VER_REVISION BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904B0" BEGIN VALUE "FileVersion", VER_FILEVERSION_STR VALUE "ProductVersion", VER_PRODUCTVERSION_STR // 其他版本字段保持不变 END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END - 创建
VersionDefs.h头文件,定义版本宏:#define VER_MAJOR 1 #define VER_MINOR 0 #define VER_BUILD 0 #define VER_REVISION 123 #define VER_FILEVERSION_STR "1.0.0.123" #define VER_PRODUCTVERSION_STR "1.0.0.123" - 修改预构建钩子脚本,不再操作RC文件,而是自动更新
VersionDefs.h中的VER_REVISION和对应的字符串值。这种方式下RC文件格式完全符合编辑器要求,不会触发冲突提示。
2. 严格匹配资源编辑器格式修改RC文件
如果必须直接修改RC文件,要让脚本严格遵循VS生成的格式:
- 保留RC文件中编辑器自动添加的所有标记(比如
//{{NO_DEPENDENCIES}}、// Generated by...注释) - 仅替换版本号的数值部分,不改动行内的其他内容、缩进和换行
- 示例PowerShell脚本片段(仅替换修订号):
$rcPath = "Path\To\Your\Project.rc" $content = Get-Content $rcPath -Raw # 匹配FILEVERSION行,递增修订号 $content = $content -replace '(FILEVERSION \d+,\d+,\d+),(\d+)', { $revision = [int]$args.Groups[2].Value + 1 "$($args.Groups[1].Value),$revision" } # 匹配ProductVersion行,同步修订号 $content = $content -replace '(PRODUCTVERSION \d+,\d+,\d+),(\d+)', { $revision = [int]$args.Groups[2].Value + 1 "$($args.Groups[1].Value),$revision" } # 匹配FileVersion字符串值 $content = $content -replace '(VALUE "FileVersion", "(\d+\.\d+\.\d+)\.(\d+)")', { $revision = [int]$args.Groups[2].Value + 1 "VALUE `"FileVersion`", `"$($args.Groups[1].Value).$revision`"" } Set-Content $rcPath $content -Encoding UTF8
3. 调整VS相关设置减少冲突
- 打开项目属性,进入资源->常规,取消勾选“跟踪依赖项”,尝试让编辑器放宽对文件格式的检查
- 进入工具->选项->文本编辑器->常规,取消勾选“检测到外部修改时提示”,但此设置会关闭所有文件的外部修改提醒,需谨慎使用
内容的提问来源于stack exchange,提问作者SigmaTel71
相关产品推荐
相关产品推荐

