必须同步关闭extensions.autoupdate、extensions.autocheckupdates和workbench.enableexperiments三个配置项,缺一不可,否则gitlens、eslint等插件仍会弹出更新提示或静默预加载新版。

关掉插件自动更新不能只设 extensions.autoUpdate 一个配置,必须同步关闭后台探测和实验性通知框架,否则 GitLens、ESLint 等插件仍会弹「New release available」或静默预加载新版。
必须关闭的三个配置项
VS Code 插件更新机制有三层独立开关,只关最上层会留后门:
-
extensions.autoUpdate: 控制是否自动下载并安装新包 —— 设为false -
extensions.autoCheckUpdates: 控制是否定期向市场发起版本探测请求 —— 也必须设为false,否则日志里能看到Checking for extension updates... -
workbench.enableExperiments: 启用新版通知框架,GitLens、Prettier 等插件依赖它推送更新提示 —— 设为false才能彻底屏蔽右下角弹窗
这三个字段必须同时写进用户级 settings.json(路径可通过 Ctrl+Shift+P → Preferences: Open User Settings (JSON) 打开),缺一不可。
为什么改了 settings.json 还在弹更新提示
常见原因不是配置没写对,而是被更高优先级的配置覆盖了:
- 项目根目录存在
.vscode/settings.json,且里面写了"extensions.autoUpdate": true—— 它会直接覆盖用户设置 - 你正在用 Remote-SSH 或 Dev Container,而远程环境的
settings.json没同步禁用 - 某些插件(如
esbenp.prettier-vscode)自带prettier.enableUpdateCheck配置项,默认为true,需单独设为false - Windows 用户若快捷方式勾选了「以管理员身份运行」,部分配置写入可能被拦截,导致看似保存成功实则未生效
锁定某个插件不升级(例如 Prettier v3.4.1)
VS Code 原生不支持语义化版本锁定,但可用组合策略实现事实冻结:
- 先确保全局
extensions.autoUpdate和extensions.autoCheckUpdates已关 - 在扩展视图(
Ctrl+Shift+X)中找到该插件,点击右下角齿轮图标 →Extension Settings→ 关闭其专属 Auto Update 开关 - 若插件提供类似
updateChannel或enableUpdateCheck的设置(如 ESLint 插件有eslint.enableUpdateCheck),一并设为false - 终极方案:卸载当前版本 → 去 marketplace 页面点「Download Extension」手动下载
.vsix文件 → 用Extensions: Install from VSIX安装 —— VS Code 不会对本地安装的插件发起任何版本检查
更新后报 Extension host terminated unexpectedly 怎么回滚
这不是配置问题,而是新版插件与当前 VS Code 内核 ABI 不兼容。回滚不能靠“撤销”,必须手动干预:
- 完全退出 VS Code,包括系统托盘残留进程
- 进入插件目录:
Windows:%USERPROFILE%\.vscode\extensions\
macOS:$HOME/.vscode/extensions/
Linux:$HOME/.vscode/extensions/ - 找到对应插件文件夹(名称含作者名和插件名,如
esbenp.prettier-vscode-3.4.1),删掉新版文件夹(如esbenp.prettier-vscode-4.0.0) - 重启 VS Code,旧版本会自动激活;如果没恢复,可手动启用已禁用的旧版插件
真正麻烦的不是找不到开关,而是你以为关完了,结果某天发现 ~/.vscode/extensions/ 下多出一个带时间戳的新插件目录 —— 那说明 extensions.autoCheckUpdates 或某个插件自己的检查逻辑仍在运行。











