遠端開發常見問題集

本文涵蓋各項 Visual Studio Code 遠端開發 (Remote Development) 擴充功能的常見問題。請參閱 SSH容器 (Containers) 以及 WSL 的文章,以取得關於設定及使用各項功能更詳細的資訊。或是參考入門 教學課程,協助您快速在遠端環境中開始作業。

有關 GitHub Codespaces 的問題,請參閱 GitHub Codespaces 文件

一般資訊

什麼是 Visual Studio Code 遠端開發?

Visual Studio Code 遠端開發擴充功能套件可讓您在容器、遠端機器(透過 SSH)或適用於 Linux 的 Windows 子系統 (WSL) 中開啟任何資料夾,並充分利用 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 Server,該伺服器可託管能直接與遠端工作區、機器和檔案系統互動的擴充功能。

Architecture summary

請參閱 支援遠端開發 以取得關於擴充功能的更多詳細資訊。

遠端開發擴充功能如何確保對遠端機器、VM 或容器的安全存取?

Visual Studio Code 遠端開發使用現有且廣為人知的傳輸方式,例如 Secure Shell (SSH) 來驗證並保護傳輸流量。除了這些已知且安全的傳輸方式所使用的連接埠外,無需公開開放任何連接埠。

所注入的 VS Code Server 會以您登入該機器時所使用的相同使用者身分執行,確保 VS Code 及其擴充功能不會在未經許可的情況下獲得不當的提升權限。伺服器由 VS Code 啟動和停止,並未連結到任何使用者或全域登入或啟動腳本。VS Code 會管理伺服器的生命週期,因此您不必擔心它是否正在執行。

VS Code Server 可以單獨安裝或使用嗎?

不行。VS Code Server 是遠端開發擴充功能的組件,並由 VS Code 用戶端管理。當 VS Code 連線到端點時,它會自動安裝並更新;如果單獨安裝,可能會迅速過期。它並非設計供其他用戶端使用,也未授權供其他用戶端使用。

VS Code Server 的連線需求是什麼?

安裝 VS Code Server 需要您的本機機器具有對外 HTTPS (連接埠 443) 的連線能力,以存取:

  • update.code.visualstudio.com
  • vscode.download.prss.microsoft.com

預設情況下,Remote - SSH 會嘗試在遠端主機上進行下載,若失敗則會改為在本機下載 VS Code Server 並在連線建立後傳輸至遠端。您可以透過 remote.SSH.localServerDownload 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定來變更此行為,改為始終在本機下載並傳輸,或從不在本機下載。

Dev Containers 擴充功能始終在本機下載並傳輸至容器中。

您可以使用 Extensions: Install from VSIX... 指令在沒有網際網路連線的情況下手動安裝擴充功能,但如果您使用擴充功能面板或 devcontainer.json 來安裝擴充功能,則您的本機機器和 VS Code Server 將需要對外 HTTPS (連接埠 443) 的存取權限,以存取:

  • marketplace.visualstudio.com
  • *.gallerycdn.vsassets.io (Azure CDN)

最後,有些擴充功能(例如 C#)會從 download.microsoft.comdownload.visualstudio.microsoft.com 下載次要相依性。其他擴充功能(如 Visual Studio Live Share)可能有額外的連線要求。如果您遇到困難,請查閱該擴充功能的文件以了解詳情。

伺服器與 VS Code 用戶端之間的所有其他通訊,會根據擴充功能透過下列傳輸通道完成:

  • SSH:已驗證的安全 SSH 通道。
  • 容器:Docker 設定的通訊通道(透過 docker exec)。
  • WSL:一個隨機的本機連接埠。

您可以在網路連線文章中找到 VS Code 本身需要存取的位置列表。

為什麼在使用 Remote - 擴充功能時,無法在 Container Tools 擴充功能中看到我的本機容器?

預設情況下,Container Tools 擴充功能將會遠端執行。雖然這在某些情況下是合理的預設值,但這意味著當 VS Code 連線到遠端 SSH 主機、容器或 WSL 時,該擴充功能可能無法顯示本機容器。

您可以使用下列其中一個解決方案來解決此問題:

使用遠端開發需要在主機上安裝哪些 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 Server 嗎?

從 VS Code 1.99 版本(2025 年 3 月)開始,由 VS Code 發布的預建伺服器僅與基於 glibc 2.28 或更高版本的 Linux 發行版相容。這包括例如 Debian 10、RHEL 8 或 Ubuntu 20.04。

VS Code 仍然允許使用者透過 Remote - SSH 擴充功能連線到 VS Code 不支援的作業系統(glibc < 2.28 且 libstdc++ < 3.4.25 的作業系統),前提是提供了包含這些必要程式庫版本的 sysroot。這種方法讓您和您的組織有更多時間遷移到較新的 Linux 發行版。

VS Code 版本 基礎需求 備註
>= 1.99.x 核心 >= 4.18, glibc >= 2.28, libstdc++ >= 3.4.25, binutils >= 2.29 <無>
重要

此方法為技術變通方案,並非官方支援的使用情境。

請遵循以下步驟來為此變通方案設定您的環境:

  1. 建置 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
    
  2. VS Code Server 在安裝過程中會使用 patchelf 來從 sysroot 取用所需的程式庫。

重要

已知 patchelf v0.17.x 會導致遠端伺服器出現區段錯誤 (segfault),我們建議使用 patchelf >=v0.18.x

  1. 在遠端主機上安裝 patchelf 二進位檔和 sysroot。

  2. 建立下列 3 個環境變數:

    • VSCODE_SERVER_CUSTOM_GLIBC_LINKER:sysroot 中動態連結器的路徑(用於 patchelf--set-interpreter 選項)。
    • VSCODE_SERVER_CUSTOM_GLIBC_PATH:sysroot 中程式庫位置的路徑(用於 patchelf--set-rpath 選項)。
    • VSCODE_SERVER_PATCHELF_PATH:遠端主機上 patchelf 二進位檔的路徑。

現在您可以使用 Remote - SSH 擴充功能連線到遠端。連線成功後,VS Code 將顯示一個關於連線不被支援的對話框和橫幅訊息。

我可以安裝個別的擴充功能,而不是安裝整個套件嗎?

可以。 遠端開發擴充功能套件為您提供了一種便捷的方式,以在最新遠端功能發布時進行存取。然而,您隨時可以從 Marketplace 或 VS Code 的「擴充功能」檢視中安裝個別擴充功能。

如何檢閱並設定擴充功能選項?

Visual Studio Code 的其他部分一樣,您可以透過設定來自訂各個遠端開發擴充功能。以 Dev Containers 為例,您可以透過在「擴充功能」檢視 (⇧⌘X (Windows, Linux Ctrl+Shift+X)) 中開啟該擴充功能,並瀏覽至「功能貢獻 (Feature Contributions)」來檢閱所有 Dev Containers 設定列表。

List of settings in Feature Contributions

WSL

與使用 WSL 作為終端機相比,該擴充功能有什麼優勢?

您可以將 WSL 視為在 Windows 上執行的 Linux 機器,您可以在其中安裝 Linux 特定的框架/工具(例如 Python, Go, Rust 等),而不影響您的 Windows 設定。接著,您可以使用 VS Code 和 WSL 擴充功能,在 WSL 中安裝的環境內容中進行開發,並與 Windows 上安裝的內容隔離。

例如,您可能在 WSL 中安裝了 Go 技術堆疊(編譯器、除錯器、檢查工具等)。如果您僅在 Windows 上執行 VS Code,則也必須在那裡安裝相同的 Go 技術堆疊,才能獲得智慧自動完成、除錯、跳轉至定義等功能。且因為語言服務是在 Windows 上執行的,它們並不了解 WSL 裡面的內容。

雖然您確實可以從 Windows 執行 WSL 中的二進位檔(反之亦然),但一般的 VS Code 擴充功能並不知道該如何執行此操作。這就是我們最初支援 WSL 除錯的方式,但很快便意識到必須更新所有的擴充功能以使其了解 WSL。

我們決定改為讓 VS Code 的部分功能在 WSL 中執行,並讓在 Windows 上執行的使用者介面與在 WSL 中執行的 VS Code Server 通訊。這正是 WSL 擴充功能所實現的功能,透過它,Go 擴充功能與其他 Go 工具(編譯器、除錯器、檢查工具)會在 WSL 中執行,而 VS Code 則在 Windows 上執行。

透過這種方法,像是智慧自動完成等語言功能可以直接針對 WSL 中的內容運作,而無需在 Windows 上進行任何設定。您不必擔心路徑問題,也不需要在 Windows 上設定不同版本的開發堆疊。如果您是將應用程式部署到 Linux,您可以將 WSL 執行個體設定得與您的執行時期環境看起來一樣,同時仍能在 Windows 上獲得豐富的編輯體驗。

擴充功能作者

身為擴充功能開發者,我需要做什麼?

VS Code 擴充功能 API 抽象化了本機/遠端的細節,因此大多數擴充功能無需修改即可運作。然而,由於擴充功能可以使用它們想要的任何 Node 模組或執行時期,因此在某些情況下可能需要進行調整。我們建議您測試您的擴充功能(特別是在容器中),以確保不需要更新。請參閱 支援遠端開發 以了解詳細資訊。

當使用者在遠端連線時,擴充功能可以存取本機資源或 API 嗎?

當 VS Code 連線到遠端環境時,擴充功能會被分類為 UI工作區 (Workspace) 擴充功能。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 Server)之上建置公開或商業服務。您不得建立其他擴充功能來延伸或操縱遠端開發擴充功能。雖然授權聲明您不得「提供本軟體作為獨立或整合的供應項目,或將其與您的任何應用程式結合供他人使用」,但您可以記錄如何將這些擴充功能與您的服務結合使用。

我可以在我自己的公開服務供應項目中重新封裝或重複使用 VS Code Server 嗎?

不行。授權指出您不得「提供本軟體作為獨立或整合的供應項目,或將其與您的任何應用程式結合供他人使用」,這意味著您不得在 VS Code Server 之上建置公開產品或服務。

我有關於是否可以使用擴充功能進行 X 的問題,請問我可以問誰?

請提出一個 issue

GDPR 與 VS Code 遠端開發

VS Code 遠端開發擴充功能遵循與 Visual Studio Code 本身相同的 GDPR 政策。詳情請參閱一般常見問題集

問題或意見回饋

有任何問題或意見回饋嗎?

© . This site is unofficial and not affiliated with Microsoft.