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

Visual Studio 2022工具箱异常项的成因及清除方法咨询

大型MFC Dialog项目工具箱异常项问题排查

问题概述

我使用Visual Studio 2022开发大型MFC Dialog项目,将项目源码拆分至多个*.rc文件。目前仅该项目的工具箱中出现异常项,暂未影响功能,现咨询该问题的成因及清除方法。

提供的RC文件代码示例

主RC文件头

// Microsoft Visual C++ generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#ifndef APSTUDIO_INVOKED
#include "targetver.h"
#endif
#include "afxres.h"
#include "verrsrc.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// Czech (Czech Republic) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CSY)
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT

#ifdef APSTUDIO_INVOKED

第二个RC文件头

// Microsoft Visual C++ generated resource script.
//
#include "resource_mat.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#ifndef APSTUDIO_INVOKED
#include "targetver.h"
#endif
#include "afxres.h"
#include "verrsrc.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// Czech (Czech Republic) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CSY)
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT

#ifdef APSTUDIO_INVOKED

RC文件尾部

#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE 9, 1
#include "afxres.rc"      // Standard components
#if !defined(_AFXDLL)
#include "afxribbon.rc"   // MFC ribbon and control bar resources
#endif
#endif

/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED

异常现象截图

异常项截图

成因分析

  • 多RC文件重复引入标准资源:主RC和子RC都引入了afxres.h、verrsrc.h等包含MFC控件定义的头文件,导致资源编辑器解析时重复注册控件信息,工具箱出现异常项。
  • 资源头文件不统一:子RC使用独立的resource_mat.h,而非主RC的resource.h,可能造成资源ID冲突或资源定义重复,干扰编辑器的资源索引。
  • 多语言资源定义冲突:多个RC文件都定义了捷克语资源块,同时尾部又存在英语资源定义,资源编辑器解析时出现语言上下文混乱。
  • Visual Studio工具箱缓存异常:大型项目资源结构复杂,VS的工具箱缓存未正确同步最新的资源配置,导致旧的或重复的控件项残留。

清除方法

  • 清理项目缓存:删除项目目录下的.vs隐藏文件夹、Debug/Release编译输出文件夹,然后重新生成整个项目,清除编译过程中产生的无效资源缓存。
  • 统一资源头文件:修改子RC文件,将#include "resource_mat.h"替换为#include "resource.h",确保所有RC文件使用同一个资源头文件,避免资源定义分散。
  • 优化RC文件结构:
    • 仅在主RC文件中引入afxres.h、verrsrc.h等标准资源头文件,子RC文件只需引入主resource.h和自定义资源相关内容。
    • 统一语言资源定义:将多语言资源块集中在主RC文件中,子RC文件不要重复定义LANGUAGE块。
    • 确保仅主RC文件包含TEXTINCLUDE 3的内容(即afxres.rc、afxribbon.rc的引入),子RC文件避免重复引入这些标准资源脚本。
  • 重置VS工具箱:
    1. 打开Visual Studio,依次点击「工具」→「选项」→「环境」→「重置工具箱」,确认重置操作。
    2. 若重置无效,手动删除工具箱缓存文件:找到路径%LOCALAPPDATA%\Microsoft\VisualStudio\<你的VS2022版本号>\Toolbox.tbd,删除该文件后重启VS。
  • 修复VS组件:若上述方法无效,打开Visual Studio Installer,选择「修改」,勾选「MFC和ATL支持」组件进行修复,确保MFC资源编辑器相关组件正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:27:28