extensions.autoUpdate: false 是最稳起点,因它直接阻止插件自动拉取新版本,且优先级高于其他更新设置;需配合 extensions.autoCheckUpdates: false 和 workbench.enableExperiments: false 才彻底禁用弹窗、轮询与通知。

为什么 extensions.autoUpdate 设为 false 是最稳的起点
插件自动更新常在你调试关键逻辑时静默发生,比如 ms-python.python 升级到 2024.10 后突然禁用旧版 Pylance 语言服务器,导致所有类型提示消失。这不是 bug,而是微软默认把插件更新和编辑器更新解耦设计的结果——extensions.autoUpdate 控制的是“是否自动拉取新版本”,它独立于 update.mode,且优先级更高。
直接在 settings.json 中写入:
"extensions.autoUpdate": false
比 GUI 点击更可靠:GUI 设置可能被工作区
.vscode/settings.json 覆盖,而 JSON 配置能明确覆盖所有作用域(除非被 Remote-SSH 或 Dev Container 的远程配置二次覆盖)。
- 该设置只影响已安装插件的后续升级行为,不影响当前插件功能
- 重启 VSCode 不是必须的,保存后立即生效
- 若你已在用 Settings Sync,此配置会同步到其他设备,避免“这台电脑正常、那台报错”的情况
如何为 ms-python.python 或 cpptools 这类高风险插件单独锁定版本
某些插件大版本变更会破坏调试器协议或语言服务 API,比如 ms-vscode.cpptools 从 1.18.x 升到 1.19.x 后,部分 CMake 工具链路径解析逻辑变更,导致 launch.json 无法识别 miDebuggerPath。VSCode 不支持在 settings.json 里写 "ms-vscode.cpptools": "1.18.5" 这种语法,但有可落地的替代路径:
- 在扩展视图(
Ctrl+Shift+X)中找到该插件 → 点右下角齿轮 → “Extension Settings” → 关闭Auto Update - 右键插件条目 → “Install Another Version…” → 选一个已验证稳定的旧版(如
2024.8.1) - 降级后打开
Developer: Toggle Developer Tools→ Network 标签页,过滤marketplace,确认无意外请求发出
注意:这个操作仅对当前设备生效;若启用 Settings Sync,其他设备不会自动继承该版本,除非你在 sync.ignoredExtensions 中显式排除它(不推荐,会导致插件列表不同步)。
sync.ignoredExtensions 怎么填才不踩坑
跨平台同步时,ms-vscode.cpptools 在 macOS 上根本没发布原生 ARM64 版本,Windows 用户装了它,Mac 用户同步过去就会一直显示 “Unsupported”。这类插件必须进 sync.ignoredExtensions 黑名单,否则每次启动都触发失败重试,拖慢加载速度。
在 settings.json 中添加:
"sync.ignoredExtensions": ["ms-vscode.cpptools", "ms-dotnettools.csharp"]
- ID 必须准确,例如
ms-vscode.cpptools来自 URLhttps://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools - 不要把主题(如
dracula-theme.theme-dracula)或语言包(如ms-ceintl.vscode-language-pack-zh-hans)加进去,它们跨平台兼容,忽略反而导致界面不一致 - 被忽略的插件仍可在本地手动启用/禁用,只是不同步其安装状态
命令行启动时临时禁用插件更新的适用场景
当你在做 CI 构建脚本调试、模型微调环境验证,或需要确保某次会话 100% 零网络请求时,code --disable-extension-updates 比改配置更干净——它连后台检查逻辑都绕过,不发任何 marketplace 请求。
- 该参数只对本次启动实例生效,不影响其他已打开窗口或后续启动
- 适合集成进 shell alias 或 Makefile,例如:
alias vscode-safe="code --disable-extension-updates --disable-telemetry" - 若你依赖某些插件的在线服务(如 CodeGeeX 的云端模型),请勿全局使用此参数
真正难的不是关掉更新,而是判断哪个插件该锁、哪个该放、哪个该忽略——这些决策必须基于你项目实际依赖的调试链路、语言服务协议版本、以及团队协作时的最小公共交集。一旦定下来,就把它固化进 settings.json 和同步策略里,而不是靠每次重启前手点几下。


















