VSCode离线安装插件失败主因是版本不匹配:需比对code --version(取前两位如1.91)与.vsix中package.json的"engines.vscode"字段(如"^1.89.0"),确保本地版本≥声明最低版本,否则静默失效或报not compatible。

vscode --version 和 package.json 中 engines.vscode 必须对齐
离线插件装不上、装了不激活,第一眼就该查这个。VSCode 不会报错,只会静默跳过——你看到插件列表里有勾选,但 Python 补全、ESLint 校验全没反应,大概率是版本声明不匹配。
操作上分三步比对:
- 运行
code --version,取前两位(如1.91.2→1.91) - 解压
.vsix文件,打开extension/package.json,找到"engines": {"vscode": "^1.89.0"} - 确认本地 VSCode 版本 ≥ 插件声明的最低版本(
^1.89.0表示 1.89.0 及以上,但不跨主版本)
常见坑:用 1.85 的 VSCode 装声明 ^1.90.0 的插件,命令行会提示 not compatible,GUI 拖拽则完全无响应;反过来,高版本插件在低版本 VSCode 上即使强行安装,LSP 服务也起不来。
Remote-SSH 连不上?先看 commit ID 是否匹配 vscode-server
内网用 Remote-SSH,90% 的“卡在 Setting up SSH Host”不是网络问题,而是远程端 vscode-server 的 commit ID 和本地 VSCode 客户端不一致。
VSCode 每次构建都有唯一 commit ID(40 位 hex),比如 6b0ab750a7a1f519c5d729e15391111111111111,它藏在 Help → About 的括号里,不是 1.91.2 那种语义化版本。
必须这么做:
- 在本地 VSCode 执行
code --version后,再运行code --status查 commit ID - 把对应 commit ID 的
vscode-server包(Linux x64 / arm64 等架构要严格对应)手动传到远程机~/.vscode-server/bin/下同名目录 - 确保目录权限为当前用户可读写,否则 server 启动失败且无日志
别下“最新版”tar 包就完事——那个包只对应某一个 commit,和你的客户端未必匹配。
拖拽 .vsix 没反应?检查工作区、焦点和文件完整性
这是离线环境下最稳的安装方式,但条件苛刻。没反应 ≠ 功能坏了,只是触发条件没满足。
三个硬性前提缺一不可:
- VSCode 必须已加载一个工作区(哪怕只是
File → Open Folder选个空目录) - 窗口要有系统焦点(任务栏图标高亮,不能是 RDP / TeamViewer 远程桌面环境,这类会拦截拖放)
- 拖的是原始
.vsix文件(用unzip -l your.vsix应能看到顶层含extension/package.json;若报错或结构为空,说明文件损坏或被重命名成 .zip)
Windows 上尤其注意:全屏模式下拖拽经常失效;macOS 如果启用了“增强安全性”,需在系统设置里给 VSCode 授予辅助功能权限,否则拖放事件被拦截。
Python/ESLint 插件装上了但没语法检查?LSP 二进制根本没下载
离线环境里,“装插件”和“能用语言功能”是两件事。ms-python.python 或 dbaeumer.vscode-eslint 这类插件,.vsix 里只带 JS 控制逻辑,真正的语言服务器(pyright、eslint-server)是首次启用时动态下载的 native 二进制。
内网断网,这一步直接卡死,状态栏显示 “Starting…”、输出面板刷 spawn ENOENT,但 VSCode 不弹任何错误提示。
正确解法不是重下 .vsix,而是:
- 在一台能联网、且 VSCode 版本**完全相同**的机器上,打开一个
.py或.js文件 - 等右下角状态栏出现
Pylance: Ready或ESLint: Enabled - 完整拷贝整个
~/.vscode/extensions/ms-python.python-2024.6.0/目录(含server/子目录和里面的可执行文件)到内网机对应路径
只拷 .vsix 或只拷 node_modules,等于只传了遥控器,没传发动机。


















