Visual Studio修改VC++项目Resource资源文件后无法保存问题求助
排查修复方案
1. 优先检查RC文件编码与BOM头问题
- 用VS自带的文本编辑器打开
.rc文件,点击菜单栏文件->高级保存选项,确认编码为Unicode(UTF-8 带签名) - 代码页65001或者Unicode - 代码页1200,旧版本VS生成的RC文件如果是ANSI编码且存在非ASCII字符时,会触发资源编辑器的静默保存失败 - VC6升级的项目大概率存在rc、rc2文件编码混用问题,先统一所有资源相关文件编码为带BOM的UTF-8再重试
2. 核查资源包含的头文件合法性
- 打开项目属性->
资源->常规,检查附加包含目录中是否存在无效路径、重复路径或者带特殊字符(空格、中文、全角符号)的路径 - 检查
resource.h文件是否存在重复的资源ID定义,或者ID值超出MFC允许的范围:标准MFC资源ID的取值范围:控件ID为
0x0001-0x7FFF,命令ID为0x8000-0xDFFF,字符串ID为0xE000-0xFFFF,存在超出范围或者重复ID时资源编辑器会出现保存异常 - 手动删除
resource.h中所有以_APS_开头的宏定义,这类是VS资源编辑器自动生成的临时宏,损坏后会导致保存失败
3. 清理VS缓存与项目临时文件
- 完全关闭所有VS窗口,删除项目目录下的
.vs隐藏文件夹、所有Debug/Release输出目录、*.aps(资源编辑器临时文件)、*.user、*.suo文件 - 重启VS后重新加载项目,选择
以管理员身份运行VS后再加载项目,避免权限问题导致的保存失败
4. 验证RC文件语法兼容性
- VC6时代的RC文件支持部分非标准语法,高版本VS资源编辑器不再兼容:检查是否存在手动编写的
#pragma指令、非标准的控件类型定义、或者在RC文件中直接引用了未注册的ActiveX控件 - 把之前注释掉的RC内容逐段恢复,每恢复一段就尝试用资源编辑器修改保存,定位到具体触发异常的代码段
- 如果是对话框版本兼容问题,手动在RC文件中把对话框的版本声明改为
DIALOGEX 0, 0, 300, 200,STYLE字段添加DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU,避免旧版VC6的DIALOG声明兼容性问题
内容的提问来源于stack exchange,提问作者radi8
相关产品推荐
相关产品推荐

