vscode工作区是通过.code-workspace文件显式定义的多项目开发上下文,必须先添加文件夹再执行“保存工作区为…”才能持久化配置;临时添加的文件夹关窗即丢,且.launch.json、extensions等均需严格遵循路径与字段规范,否则静默失效。

VSCode 没有“项目”概念,只有“工作区”;多项目必须用 .code-workspace 文件显式创建并保存,否则所有添加操作都是临时的、关窗即丢。
为什么“添加文件夹到工作区”后不保存就失效
菜单里点 Add Folder to Workspace… 只是向当前窗口临时注入路径,VSCode 不会自动持久化。关掉窗口后,folders、settings、launch 配置全丢——它不是快捷方式,而是未提交的草稿。
- 真正可复现、可提交 Git、双击启动的,只有
.code-workspace文件 - 必须执行
File > Save Workspace As…,且后缀名严格为.code-workspace - 如果先
Open Folder再加其他文件夹,最后保存,生成的文件可能缺失调试上下文,launch.json不被识别
.code-workspace 文件里哪些字段容易写错
它是纯 JSON,但字段语义强约束,写错会导致静默忽略或加载失败:
-
folders数组中每个对象必须含path字段,值为相对路径(如"./backend")或绝对路径(如"/home/user/project/api"),不支持~或环境变量 - 路径不能嵌套:同时存在
"./backend"和"./backend/src"会报错folder is already in workspace -
settings是覆盖层,不继承注释、不保留缩进——保存后所有注释被删,缩进强制为 2 空格 -
extensions字段只支持recommendations,无法按文件夹启用/禁用插件;真要隔离,得右键资源管理器中某文件夹 →Configure Extension Settings
多根工作区下 launch.json 和 tasks.json 放哪
它们不再属于某个子项目,而是属于整个工作区,位置和引用必须严格匹配:
- 必须放在
.code-workspace文件所在目录的.vscode/下,即:/path/to/my-workspace.code-workspace和/path/to/.vscode/launch.json -
launch.json中每个configuration必须用cwd显式指定子项目,例如:"cwd": "${workspaceFolder:backend}",不能写"./backend"这种模糊路径 - 子项目自己的
.vscode/launch.json在多根工作区下会被忽略——VSCode 只读取工作区根级的.vscode/launch.json - 若依赖
.env文件,要用"envFile": "${workspaceFolder:web-client}/.env.local",而非相对路径
切换工作区时编辑器标签页为什么“还开着但不生效”
VSCode 不会自动清理跨工作区的打开文件。比如你在 frontend.code-workspace 中打开了 src/App.tsx,切到 fullstack.code-workspace 后,这个标签页还在,但:
- ESLint 规则沿用旧工作区配置,报错不准确
- Git 状态栏显示的是旧文件夹的暂存区,而非当前工作区
- Debug 侧边栏里的配置不会自动刷新,点 ▶️ 可能启动失败
- 唯一可靠办法是
Ctrl+K W关闭全部标签页,或启用"workbench.editor.closeOnFileDelete": true避免误删后残留无效页
这是最容易被忽略的协作隐患:没有自动过滤机制,所有上下文都靠手动清理。











