遠端開發常見問題解答
本文介紹了有關 **Visual Studio Code 遠端開發**擴充套件的常見問題。有關設定和使用各項功能的更多詳細資訊,請參閱 SSH、容器和 WSL 文章。或者嘗試入門教程 教程 以幫助您在遠端環境中快速執行。
有關 GitHub Codespaces 的問題,請參閱 GitHub Codespaces 文件。
通用
什麼是 Visual Studio Code 遠端開發?
Visual Studio Code 遠端開發擴充套件包 允許您在容器中、遠端計算機上(透過 SSH)或 Windows Subsystem for Linux 中開啟任何資料夾,並利用 VS Code 的完整功能集。這意味著 VS Code 可以提供本地質量的開發體驗——包括完整的 IntelliSense(補全)、除錯等等——無論您的程式碼位於何處或託管在哪裡。
VS Code 遠端開發比本地編輯有哪些優勢?
遠端開發的一些好處包括:
- 能夠在與本地執行的作業系統不同的作業系統上編輯、構建或除錯。
- 能夠在與目標部署環境匹配的環境中開發。
- 使用比本地計算機更大或更專業的硬體進行開發。
- 能夠編輯儲存在其他位置的程式碼,例如在雲端或客戶站點。
- 分離開發環境以避免衝突,提高安全性並加快上手速度。
與使用網路共享或同步檔案相比,VS Code 遠端開發提供了顯著更好的效能,並更好地控制您的開發環境和工具。
遠端開發擴充套件與 GitHub Codespaces 有何關係?
GitHub Codespaces 是一項提供託管雲開發環境的服務,可以透過 VS Code 和新的基於瀏覽器的編輯器進行訪問。該服務還允許 VS Code 和基於瀏覽器的編輯器訪問自託管環境(桌面或伺服器),而無需 SSH 伺服器甚至直接網路路由。您可以在 GitHub Codespaces 文件 中閱讀更多內容。
雖然遠端開發和 Codespaces 擴充套件共享技術和功能,但遠端開發擴充套件是單獨釋出的,並且可以獨立於 GitHub Codespaces 執行。
遠端開發擴充套件如何工作?
Visual Studio Code 遠端開發允許您的本地 VS Code 安裝透過將某些命令的執行移動到“遠端伺服器”來透明地與其他機器(無論是虛擬還是物理)上的原始碼和執行時環境進行互動。當您連線到遠端端點時,**VS Code 伺服器**由 VS Code 快速安裝,並且可以託管直接與遠端工作區、機器和檔案系統互動的擴充套件。
有關擴充套件的更多詳細資訊,請參閱 支援遠端開發。
遠端開發擴充套件如何保護對遠端機器、虛擬機器或容器的訪問?
Visual Studio Code 遠端開發使用現有、眾所周知的傳輸方式,例如 安全外殼 來進行身份驗證和保護流量。除了這些眾所周知、安全的傳輸方式使用的埠之外,無需公開任何埠。
注入的 VS Code 伺服器以您登入機器時使用的同一使用者身份執行,確保 VS Code 及其擴充套件未經許可不會獲得不當的特權訪問。伺服器由 VS Code 啟動和停止,並且不連線到任何使用者或全域性登入或啟動指令碼。VS Code 管理伺服器的生命週期,因此您無需擔心它是否正在執行。
VS Code 伺服器可以單獨安裝或使用嗎?
不能。VS Code 伺服器是遠端開發擴充套件的一個元件,由 VS Code 客戶端管理。當它連線到端點時,VS Code 會自動安裝和更新它,如果單獨安裝,它可能會很快過時。它不打算用於或 授權 其他客戶端使用。
VS Code 伺服器的連線要求是什麼?
安裝 VS Code 伺服器要求您的本地機器具有到以下地址的出站 HTTPS(埠 443)連線:
update.code.visualstudio.com
vscode.download.prss.microsoft.com
預設情況下,Remote - SSH 將嘗試在遠端主機上下載,並在連線建立後,如果失敗,則退回到在本地下載 VS Code 伺服器並遠端傳輸。您可以使用 remote.SSH.localServerDownload 設定更改此行為,以始終在本地下載然後傳輸,或從不本地下載。
Dev Containers 擴充套件始終在本地下載並傳輸到容器中。
您可以使用 **Extensions: Install from VSIX...** 命令手動安裝沒有網際網路連線的擴充套件,但如果您使用擴充套件面板或 devcontainer.json
安裝擴充套件,您的本地機器和 VS Code 伺服器將需要到以下地址的出站 HTTPS(埠 443)訪問:
marketplace.visualstudio.com
*.gallerycdn.vsassets.io
(Azure CDN)
最後,一些擴充套件(如 C#)從 download.microsoft.com
或 download.visualstudio.microsoft.com
下載次要依賴項。其他擴充套件(如 Visual Studio Live Share)可能有額外的連線要求。如果你遇到問題,請查閱擴充套件的文件以獲取詳細資訊。
伺服器和 VS Code 客戶端之間的所有其他通訊透過以下傳輸通道完成,具體取決於擴充套件:
- SSH:經過身份驗證的安全 SSH 隧道。
- 容器:Docker 配置的通訊通道(透過
docker exec
)。 - WSL:隨機本地埠。
您可以在 網路連線文章 中找到 VS Code 本身需要訪問的位置列表。
為什麼在使用 Remote - 擴充套件時,我在容器工具擴充套件中看不到我的本地容器?
預設情況下,容器工具擴充套件將在遠端執行。雖然這在某些情況下是一個合理的預設值,但這意味著當 VS Code 連線到遠端 SSH 主機、容器或 WSL 時,該擴充套件可能不會顯示本地容器。
您可以使用以下解決方案之一來解決此問題:
-
開啟一個新的本地視窗(**檔案 > 新視窗**)並使用它來處理本地容器。
-
安裝 Dev Containers 擴充套件,並在需要檢視本地容器時使用 遠端資源管理器。
-
**僅限 WSL**:使用 WSL 2 的 Docker 技術預覽版 或 配置 Docker Desktop 以在 WSL 1 中使用。
-
**僅限 Dev Containers**:在容器中轉發 Docker 套接字並安裝 Docker CLI(僅)。
-
使用 extensionKind 屬性 強制擴充套件為
ui
。但是,這將阻止某些命令工作。
使用遠端開發需要在主機上安裝哪些 Linux 包或庫?
遠端開發需要核心 >= 4.18,glibc >=2.28 和 libstdc++ >= 3.4.25。最近的 x86_64 基於 glibc 的發行版有最好的支援,但具體要求可能因發行版而異。
Dev Containers 和 WSL 擴充套件支援基於 musl 的 Alpine Linux,Remote - SSH 支援 ARMv7l (AArch32) / ARMv8l (AArch64)。但是,某些擴充套件中的本機依賴項可能導致它們無法在非 x86_64 glibc 發行版上執行。請注意,實驗性的 ARMv8l (AArch64) 僅在 VS Code Insiders 中可用。
有關更多詳細資訊,請參閱 使用 Linux 進行遠端開發。
我可以在舊版 Linux 發行版上執行 VS Code 伺服器嗎?
從 VS Code 1.99 版本(2025 年 3 月)開始,VS Code 分發的預構建伺服器僅與基於 glibc 2.28 或更高版本的 Linux 發行版相容。例如,這些發行版包括 Debian 10、RHEL 8 或 Ubuntu 20.04。
如果提供了包含這些所需庫版本的 sysroot,VS Code 仍然允許使用者透過 遠端 - SSH 擴充套件連線到 VS Code 不支援的作業系統(glibc < 2.28 和 libstdc++ < 3.4.25 的作業系統)。這種方法為您和您的組織提供了更多時間遷移到更新的 Linux 發行版。
VS Code 版本 | 基本要求 | 備註 |
---|---|---|
>= 1.99.x | 核心 >= 4.18, glibc >=2.28, libstdc++ >= 3.4.25, binutils >= 2.29 |
此方法是技術上的變通方法,並非官方支援的使用場景。
請按照以下步驟配置您的環境以使用此變通方法:
-
構建 sysroot
我們建議使用 Crosstool-ng 構建 sysroot。以下是一些您可以開始使用的示例配置:
以下示例容器也可以用於擁有一個安裝了 Crosstool-ng 的環境:
FROM ubuntu:latest RUN apt-get update RUN apt-get install -y gcc g++ gperf bison flex texinfo help2man make libncurses5-dev \ python3-dev autoconf automake libtool libtool-bin gawk wget bzip2 xz-utils unzip \ patch rsync meson ninja-build # Install crosstool-ng RUN wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.26.0.tar.bz2 RUN tar -xjf crosstool-ng-1.26.0.tar.bz2 RUN cd crosstool-ng-1.26.0 && ./configure --prefix=/crosstool-ng-1.26.0/out && make && make install ENV PATH=$PATH:/crosstool-ng-1.26.0/out/bin
一旦您擁有一個安裝了 Crosstool-ng 並準備好相關配置的環境,執行以下命令生成 sysroot:
mkdir toolchain-dir cd toolchain-dir cp <path-to-config-file> .config ct-ng build
-
VS Code 伺服器在安裝過程中使用 patchelf 從 sysroot 中獲取所需的庫。
已知 patchelf v0.17.x
會導致遠端伺服器出現段錯誤,我們建議使用 patchelf >=v0.18.x
-
在遠端主機上安裝 patchelf 二進位制檔案和 sysroot
-
建立以下 3 個環境變數
現在您可以透過使用 Remote - SSH 擴充套件連線到遠端。成功連線後,VS Code 將顯示一個對話方塊和橫幅訊息,告知連線不受支援。
我可以安裝單個擴充套件而不是擴充套件包嗎?
是的。遠端開發擴充套件包 為您提供了方便的方式來訪問所有最新的遠端功能。但是,您始終可以從 Marketplace 或 VS Code 擴充套件檢視安裝單個擴充套件。
如何檢視和配置擴充套件設定?
與 Visual Studio Code 的其他部分一樣,您可以透過其設定自定義每個遠端開發擴充套件。以 Dev Containers 為例,您可以透過在“擴充套件”檢視 (⇧⌘X (Windows, Linux Ctrl+Shift+X)) 中開啟擴充套件,然後導航到 **功能貢獻** 來檢視所有 Dev Containers 設定列表
WSL
與將 WSL 用作終端相比,該擴充套件有什麼優勢?
您可以將 WSL 視為在 Windows 上執行的 Linux 機器,您可以在其中安裝 Linux 特定框架/工具(例如 Python、Go、Rust 等),而不會影響您的 Windows 設定。然後,您可以使用 VS Code 和 WSL 擴充套件在 WSL 中安裝的內容的上下文中進行開發,與 Windows 上安裝的內容隔離。
例如,您可以在 WSL 中安裝 Go 堆疊(編譯器、偵錯程式、linters 等)。如果您只在 Windows 上執行 VS Code,您還必須在那裡安裝相同的 Go 堆疊才能獲得智慧補全、除錯、跳轉到定義導航等功能。而且由於語言服務在 Windows 上執行,它們不知道 WSL 中有什麼。
確實,您可以在 Windows 上從 WSL 執行二進位制檔案,反之亦然,但常規 VS Code 擴充套件不知道如何做到這一點。這就是我們開始支援 WSL 除錯的方式,但很快意識到我們必須更新所有擴展才能瞭解 WSL。
我們決定改為讓 VS Code 的部分內容在 WSL 中執行,並讓在 Windows 上執行的 UI 與在 WSL 中執行的 VS Code 伺服器對話。這就是 WSL 擴充套件所實現的,透過它,Go 擴充套件與其餘 Go 工具(編譯器、偵錯程式、linters)一起在 WSL 中執行,而 VS Code 在 Windows 上執行。
透過這種方法,智慧補全等語言功能可以直接在 WSL 中執行,而無需在 Windows 上設定任何內容。您無需擔心路徑問題或在 Windows 上設定不同版本的開發堆疊。如果您要將應用程式部署到 Linux,您可以將 WSL 例項設定為類似於您的執行時環境,同時仍然在 Windows 上獲得豐富的編輯體驗。
擴充套件作者
作為擴充套件作者,我需要做什麼?
VS Code 擴充套件 API 抽象了本地/遠端細節,因此大多數擴充套件無需修改即可工作。但是,鑑於擴充套件可以使用任何節點模組或執行時,因此在某些情況下可能需要進行調整。我們建議您測試您的擴充套件(尤其是在容器中)以確保不需要更新。有關詳細資訊,請參閱 支援遠端開發。
當用戶遠端連線時,擴充套件是否可以訪問本地資源或 API?
當 VS Code 連線到遠端環境時,擴充套件被分類為**UI**或**工作區**擴充套件。UI 擴充套件在**本地擴充套件主機**中執行,可以提供 UI 或個性化功能(例如主題),並且可以訪問本地檔案或 API。工作區擴充套件與工作區一起在**遠端擴充套件主機**中執行,並具有對原始碼、遠端檔案系統和遠端 API 的完全訪問許可權。雖然工作區擴充套件不側重於 UI 自定義,但它們也可以貢獻資源管理器、檢視和其他 UI 元素。
當用戶安裝擴充套件時,VS Code 會嘗試推斷正確的位置並根據其型別進行安裝。不需要遠端執行的擴充套件(例如主題和其他 UI 自定義)會自動安裝在 UI 端。所有其他擴充套件都被視為工作區擴充套件,因為它們功能最全。但是,擴充套件作者也可以使用 `package.json` 中的 `extensionKind` 屬性覆蓋此位置。
如果您的擴充套件未按預期執行,有一些步驟可以檢查 它是否在正確的位置執行,或者是否應該具有不同的 extensionKind
。另請參閱 支援遠端開發,瞭解有關擴充套件作者需要了解的遠端開發和 Codespaces 的更多詳細資訊。
許可證和隱私
位置
您可以在此處找到 VS Code 遠端開發擴充套件的許可證:
為什麼遠端開發擴充套件或其元件不是開源的?
Visual Studio Code 遠端開發擴充套件及其相關元件採用開放的規劃、問題和功能請求流程,但目前不是開源的。這些擴充套件共享的原始碼也用於完全託管的遠端開發服務,例如 GitHub Codespaces 及其相關擴充套件。
有關更多資訊,請參閱 Visual Studio Code 與 'Code - OSS' 的區別 和 Microsoft 擴充套件許可證 文章。
遠端開發擴充套件連線到哪裡有限制嗎?
您可以自由地將擴充套件用於個人或公司用途,以連線到您自己的物理機器、虛擬機器或容器。這些可以是本地的、您自己的私有云或資料中心中的、Azure 中的,或其他雲/非雲託管提供商。您不能在擴充套件或其相關元件之上構建公共產品或服務(請參閱下一個問題)。
我可以使用 VS Code 遠端開發擴充套件來構建自己的產品或服務嗎?
您可以將這些擴充套件與您自己的內部或私有服務一起使用。您不能在 VS Code 遠端開發擴充套件或其相關元件(例如 VS Code 伺服器)之上構建公共或商業服務。您不能建立其他擴充套件來擴充套件或操作遠端開發擴充套件。雖然許可證宣告您不得“以獨立或整合產品形式提供軟體,或將其與您的任何應用程式結合供他人使用”,但您可以記錄如何將擴充套件與您的服務結合使用。
我可以重新打包或在我自己的公共服務產品中重用 VS Code 伺服器嗎?
不能。許可證規定您不得“以獨立或整合產品形式提供軟體,或將其與您的任何應用程式結合供他人使用”,這意味著您不得在 VS Code 伺服器之上構建公共產品或服務。
我有一個關於是否可以將擴充套件用於 X 的問題,我可以問誰?
請提交一個 問題。
GDPR 和 VS Code 遠端開發
VS Code 遠端開發擴充套件遵循 Visual Studio Code 本身的 GDPR 策略。有關詳細資訊,請參閱 一般常見問題解答。
問題或反饋
有問題或反饋?
- 請參閱 提示和技巧。
- 在 Stack Overflow 上搜索。
- 新增功能請求或報告問題。