VSIX文件必须解压后按原顶层目录名复制到extensions目录,不可直接放入.vsix文件;需彻底退出VSCode(包括托盘进程)再重启,否则不生效;语言插件还需同步LSP二进制文件,企业策略禁用时手动复制是唯一可行方式。

vsix文件必须先解压再复制到extensions目录
VSCode不认.vsix压缩包本身,只认解压后符合规范的目录结构。直接把.vsix文件扔进extensions目录,VSCode启动时会完全忽略——日志里甚至不会报错,只会显示Extension 'xxx' is not installed。
关键不是“解压”,而是解压后保留顶层目录名,且整个目录必须原样移入用户扩展路径:
- 用
unzip -l xxx.vsix确认顶层目录名,例如ms-python.python-2024.6.0/(注意末尾斜杠) - 这个目录名 =
publisher.extensionname-version,不能重命名、不能删后缀、不能只复制里面的内容 - Windows目标路径:
%USERPROFILE%\AppData\Roaming\Code\Extensions\(不是.vscode\extensions) - macOS/Linux目标路径:
$HOME/.vscode/extensions/
解压后必须彻底退出VSCode才能生效
VSCode在启动时会扫描extensions目录并缓存结果。如果只是关闭窗口但托盘进程还在(Windows右下角图标没消失,macOS活动监视器里仍有Code Helper),新复制进去的扩展根本不会被加载。
验证是否真正退出:
- Windows:任务管理器中搜索
code,确保没有Code.exe或Code Helper残留进程 - macOS:终端执行
ps aux | grep -i code,无输出才算干净 - Linux:同上,或用
pgrep -f "code"
重启后按Ctrl+Shift+P输入Developer: Show Running Extensions,状态应为Local而非Marketplace。
语言类插件要连LSP二进制一起拷贝
像ms-python.python这类插件,.vsix里只含前端逻辑,首次启用时会自动下载pyright或python-language-server等native二进制。离线环境卡在Downloading...就是这个原因。
正确做法不是单独解压.vsix,而是在有网机器上完成一次完整安装:
- 用同一版本VSCode安装该插件,并打开一个
.py文件,等状态栏显示Python Interpreter selected或Ready - 进入
extensions目录,找到对应扩展子目录(如ms-python.python-2024.6.0),整个文件夹打包带走 - 复制到内网机相同路径下,再彻底退出VSCode重启
否则只靠解压.vsix,即使扩展显示已启用,代码补全、跳转、诊断等功能全部失效。
企业策略禁用时,手动解压是唯一可行路径
当右下角出现Extensions disabled by policy提示,拖拽和code --install-extension都会静默失败——这是组策略硬拦截,无法绕过。
此时手动解压复制是底层逃逸方案,但要注意:
- 解压工具必须支持ZIP64(某些老版
unzip会丢文件),推荐用7z x xxx.vsix或VSCode内置解压器 - 检查解压后是否有
node_modules目录;若缺失,说明原始.vsix未打包依赖,需额外补全 - ARM Mac装x64插件不会报错,但
pyright等二进制直接不运行;得确认package.json里engines.vscode和os字段是否匹配本地架构
这一步没容错空间:目录名错一位、路径多一层、进程没杀干净,结果都是插件不可见。


















