现已发布!阅读关于 12 月份的新功能和修复。

在 WSL 中开发

Visual Studio Code WSL 扩展允许您直接从 VS Code 将 Windows Subsystem for Linux (WSL) 作为您的全职开发环境。您可以开发基于 Linux 的环境,使用特定于 Linux 的工具链和实用程序,并从 Windows 的舒适环境中运行和调试您的基于 Linux 的应用程序。

该扩展直接在 WSL 中运行命令和其他扩展,因此您可以编辑位于 WSL 或挂载的 Windows 文件系统(例如 /mnt/c)中的文件,而无需担心路径问题、二进制兼容性或其他跨 OS 挑战。该扩展将在 WSL 中安装 VS Code Server;该服务器独立于 WSL 中任何现有的 VS Code 安装。

WSL Architecture

这使 VS Code 能够提供本地质量的开发体验——包括完整的 IntelliSense(补全)、代码导航和调试——无论您的代码托管在哪里

入门

注意:在审阅完此主题后,您可以开始学习入门的 WSL 教程

安装

要开始,您需要

  1. 安装 Windows Subsystem for Linux 以及您偏好的 Linux 发行版。

    注意: WSL 1 在某些类型的开发方面存在一些已知限制。此外,由于扩展中本地源代码的 glibc 依赖关系,安装在 Alpine Linux 中的扩展可能无法正常工作。有关详细信息,请参阅 远程开发与 Linux 文章。

  2. Windows端安装 Visual Studio Code(而不是在 WSL 中)。

    注意: 安装过程中提示选择附加任务时,请务必选中添加到 PATH 选项,以便您可以使用 code 命令轻松地在 WSL 中打开文件夹。

  3. 安装 WSL 扩展。如果您计划在 VS Code 中使用其他远程扩展,您可以选择安装 远程开发扩展包

打开远程文件夹或工作区

从 WSL 终端

在 VS Code 中打开 Windows Subsystem for Linux 中的文件夹,与从命令提示符或 PowerShell 中打开 Windows 文件夹非常相似。

  1. 打开一个WSL 终端窗口(使用开始菜单项或从命令提示符/PowerShell 输入 wsl)。

  2. 导航到您想在 VS Code 中打开的文件夹(包括但不限于 Windows 文件系统挂载,如 /mnt/c

  3. 在终端中输入code .。首次执行此操作时,您应该会看到 VS Code 正在获取在 WSL 中运行所需的组件。这只需要很短的时间,并且只需要执行一次。

    注意: 如果此命令不起作用,您可能需要重新启动终端,或者在安装时未将 VS Code 添加到您的路径中。

  4. 片刻之后,将出现一个新的 VS Code 窗口,您会看到一个通知,表明 VS Code 正在 WSL 中打开文件夹。

    WSL Starting notification

    VS Code 将继续在 WSL 中配置自身,并在取得进展时及时向您更新。

  5. 完成后,您将在左下角看到一个 WSL 指示符,您将能够像往常一样使用 VS Code!

    WSL Status Bar Item

就是这样!在此窗口中执行的任何 VS Code 操作都将在 WSL 环境中执行,从编辑和文件操作到调试、使用终端等一切操作。

从 VS Code

或者,您可以直接从 VS Code 打开 WSL 窗口

  1. 启动 VS Code。
  2. F1,选择WSL: Connect to WSL(用于默认发行版)或WSL: Connect to WSL using Distro(用于特定发行版)。
  3. 使用“文件”菜单打开您的文件夹。

如果您已经打开了一个文件夹,您也可以使用WSL: Reopen Folder in WSL命令。您将被提示使用哪个发行版。

如果您正在 WSL 窗口中,并希望在本地窗口中打开当前输入,请使用WSL: Reopen in Windows

从 Windows 命令提示符

要直接从 Windows 提示符打开 WSL 窗口,请使用 --remote 命令行参数

code --remote wsl+<distro name> <path in WSL>

例如:code --remote wsl+Ubuntu /home/jim/projects/c

我们需要猜测输入路径是文件还是文件夹。如果它有文件扩展名,则被视为文件。

要强制打开文件夹,请在路径后添加斜杠或使用

code --folder-uri vscode-remote://wsl+Ubuntu/home/ubuntu/folder.with.dot

要强制打开文件,请添加 --goto 或使用

code --file-uri vscode-remote://wsl+Ubuntu/home/ubuntu/fileWithoutExtension

使用 Git

如果您在 WSL 和 Windows 中使用同一个存储库,请务必设置一致的换行符。有关详细信息,请参阅 技巧和窍门

您还可以通过将 WSL 配置为使用 Windows Git 凭据管理器来避免输入密码。有关详细信息,请参阅 技巧和窍门

管理扩展

VS Code 在两个位置之一运行扩展:本地的 UI/客户端端,或在 WSL 中。虽然影响 VS Code UI 的扩展(如主题和代码片段)是本地安装的,但大多数扩展都驻留在 WSL 中。

如果您从“扩展”视图安装扩展,它将自动安装在正确的位置。安装后,您可以根据类别分组来判断扩展的安装位置。将有一个本地 - 已安装类别和一个适用于 WSL 的类别。

Workspace Extension Category

Local Extension Category

注意: 如果您是扩展作者,并且您的扩展未能正常工作或安装在错误的位置,请参阅 支持远程开发 以获取详细信息。

实际上需要在远程运行的本地扩展将在本地 - 已安装类别中显示为灰色且被禁用。选择安装以在远程主机上安装扩展。

Disabled Extensions w/Install Button

您还可以通过转到“扩展”视图并选择在 WSL 中安装本地扩展:{名称}(通过本地 - 已安装标题栏右侧的云朵按钮)来在 WSL 中安装所有本地安装的扩展。这将显示一个下拉列表,您可以在其中选择要安装到 WSL 实例中的本地安装的扩展。

Install all extensions

在 WSL 中打开终端

从 VS Code 在 WSL 中打开终端很简单。一旦文件夹在 WSL 中打开,您在 VS Code 中打开的任何终端窗口终端 > 新终端)将自动在 WSL 中运行,而不是在本地运行。

您也可以从同一个终端窗口使用 code 命令行执行多项操作,例如在 WSL 中打开新文件或文件夹。输入 code --help 可查看命令行可用的选项。

Using the code CLI

在 WSL 中调试

一旦您在 WSL 中打开了一个文件夹,您就可以像在本地运行应用程序一样使用 VS Code 的调试器。例如,如果您在 launch.json 中选择了启动配置并开始调试(F5),应用程序将在远程主机上启动并附加调试器。

有关在 .vscode/launch.json 中配置 VS Code 调试功能的详细信息,请参阅调试文档。

WSL 特定设置

当您在 WSL 中打开文件夹时,VS Code 的本地用户设置也会被重新使用。虽然这可以保持您的用户体验一致,但您可能希望在本地计算机和 WSL 之间更改其中一些设置。幸运的是,连接到 WSL 后,您还可以通过从命令面板(F1)运行首选项: Open Remote Settings 命令,或通过在设置编辑器中选择“远程”选项卡来设置 WSL 特定设置。当您在 WSL 中打开文件夹时,这些设置将覆盖您已有的任何本地设置。

高级:环境设置脚本

当 VS Code Remote 在 WSL 中启动时,不会运行任何 shell 启动脚本。这是为了避免与针对 shell 优化的启动脚本出现问题。如果您想运行其他命令或修改环境,可以在设置脚本 ~/.vscode-server/server-env-setup(Insiders:~/.vscode-server-insiders/server-env-setup)中完成。如果存在,该脚本将在服务器启动之前被处理。

该脚本必须是有效的 Bourne shell 脚本。请注意,无效的脚本将阻止服务器启动。如果您最终得到了阻止服务器启动的脚本,您将不得不使用常规的 WSL shell 并删除或重命名设置脚本。

查看 WSL 日志(WSL: Show Log)以获取输出和错误。

高级:在容器中打开 WSL 2 文件夹

如果您正在使用 WSL 2 和 Docker Desktop 的 WSL 2 后端,您可以使用 Dev Containers 扩展来处理存储在 WSL 中的源代码!只需按照以下步骤操作

  1. 如果尚未安装,请安装和设置 Docker Desktop 的 WSL 2 支持。

    提示:转到设置 > 资源 > WSL 集成,并启用 Docker 与您将要使用的 WSL 发行版的集成。

  2. 如果尚未安装,请与 WSL 扩展一起安装 Dev Containers 扩展。

  3. 接下来,像往常一样在 WSL 中打开您的源代码文件夹

  4. 文件夹在 WSL 中打开后,从命令面板(F1)中选择Dev Containers: Reopen in Container

  5. 如果文件夹中没有 .devcontainer/devcontainer.json 文件,系统将要求您从可过滤列表或现有的 DockerfileDocker Compose 文件(如果存在)中选择一个起点。

    Select a node dev container definition

  6. VS Code 窗口(实例)将重新加载并开始构建开发容器。进度通知会提供状态更新。

    Dev Container Progress Notification

  7. 构建完成后,VS Code 将自动连接到容器。现在您可以从容器内部处理您的源代码。

有关更多信息,请参阅 Dev Containers 文档

已知限制

本节包含 WSL 常见问题列表。目的不是提供完整的问题列表,而是强调一些常见问题。

有关与 WSL 相关的活动问题列表,请参见此处。

我在 WSL 1 中打开的工作区中重命名文件夹时收到 EACCES: permission denied 错误

这是 WSL 文件系统实现中的一个已知问题(Microsoft/WSL#3395Microsoft/WSL#1956),由 VS Code 激活的文件监视器引起。该问题将在 WSL 2 中得到修复。

为避免此问题,请将 remote.WSL.fileWatcher.polling 设置为 true。但是,基于轮询的文件监视会对大型工作区产生性能影响。

对于大型工作区,您可能需要增加轮询间隔:remote.WSL.fileWatcher.pollingInterval 并控制被监视的文件夹:files.watcherExclude

WSL 2 没有该文件监视器问题,并且不受新设置的影响。

WSL 1 中的 Golang

问题 现有问题
Delve 调试器在 WSL 中不起作用 go-delve/delve#810Microsoft/vscode-go#926

WSL 1 中的 Node.js

问题 现有问题
NodeJS Error: spawn EACCES(此错误的不同变体) Microsoft/WSL#3886
Webpack HMR 不起作用 Microsoft/WSL#2709
Firebase 通过 node 在 WSL 上使用时速度极慢 Microsoft/WSL#2657

Git 限制

如果你使用 SSH 克隆 Git 仓库,并且你的 SSH 密钥有密码短语,VS Code 的拉取和同步功能在远程运行时可能会挂起。请使用不带密码短语的 SSH 密钥,使用 HTTPS 克隆,或者从命令行运行 git push 来解决此问题。

容器工具扩展限制

虽然 Container Tools 扩展可以远程和本地运行,但如果它已经在本地安装,您将无法在远程 SSH 主机上安装它,除非先在本地卸载它。我们将在未来的 VS Code 版本中解决此问题。

扩展限制

许多扩展可以在 WSL 中运行而无需修改。但是,在某些情况下,某些功能可能需要更改。如果您遇到扩展问题,请参阅 此处有关常见问题和解决方案的摘要,您可以在报告问题时告知扩展作者。

此外,在使用 Alpine Linux 发行版时安装在 WSL 中的某些扩展可能由于扩展内部本地代码中的 glibc 依赖关系而无法正常工作。有关详细信息,请参阅 Linux 远程开发文章。

常见问题

为何要求更改默认发行版?

当使用 WSL: Connect to WSL using Distro 并在 Windows 10 May 2019 更新(版本 1903)之前的 WSL 上运行时,系统将要求您切换默认发行版,因为 WSL 命令只能在默认发行版上运行,因为它尚不支持 -d 选项。

您始终可以通过使用 wslconfig.exe 手动切换默认发行版。

例如

wslconfig /setdefault Ubuntu

您可以使用以下命令查看已安装的发行版

wslconfig /l

我看到关于丢失库或依赖项的错误

某些扩展依赖于某些 WSL Linux 发行版的干净安装中未找到的库。您可以使用其包管理器将其他库添加到您的 Linux 发行版中。对于 Ubuntu 和 Debian 系列发行版,请运行 sudo apt-get install <package> 来安装所需的库。查阅您的扩展或提到的运行时的文档以获取更多安装详细信息。

WSL 扩展的连接要求是什么?

WSL 扩展和 VS Code Server 需要出站 HTTPS(端口 443)连接到

  • update.code.visualstudio.com
  • vscode.download.prss.microsoft.com
  • marketplace.visualstudio.com
  • *.gallerycdn.vsassets.io (Azure CDN)

某些扩展(如 C#)会从 download.microsoft.comdownload.visualstudio.microsoft.com 下载辅助依赖项。其他扩展(如 Visual Studio Live Share)可能具有额外的连接要求。如果您遇到问题,请查阅扩展文档以获取详细信息。

服务器与 VS Code 客户端之间的所有其他通信都通过随机的本地 TCP 端口完成。您可以在网络连接文章中找到 VS Code 本身需要访问的位置列表。

我在代理后面,遇到连接问题

Windows 或 WSL 端可能缺少代理设置。

当 VS Code 打开一个远程窗口时,WSL 扩展会尝试在 Windows 端下载 VS Code 服务器。因此,它会使用 Windows 端代理配置

当远程 VS Code 从 WSL 终端启动时,下载使用 WSL 发行版中的 wget 进行。代理设置可以在

一旦服务器启动并运行,将使用远程选项卡上的代理设置。

我能否强制扩展在本地/远程运行?

扩展通常设计和测试为仅在本地或远程运行,而不是两者都运行。但是,如果扩展支持,你可以在 settings.json 文件中强制它在特定位置运行。

例如,以下设置将强制 Container Tools 扩展在本地运行,以及 Remote - SSH: Editing Configuration Files 扩展在远程运行,而不是使用它们的默认设置:

"remote.extensionKind": {
    "ms-azuretools.vscode-containers": [ "ui" ],
    "ms-vscode-remote.remote-ssh-edit": [ "workspace" ]
}

将值设置为 "ui" 而不是 "workspace" 将强制扩展在本地 UI/客户端端运行。通常,除非扩展文档另有说明,否则应仅用于测试,因为它可能导致扩展中断。有关详细信息,请参阅支持远程开发一文。

作为扩展作者,我需要做什么?

VS Code 扩展 API 抽象了本地/远程细节,因此大多数扩展无需修改即可工作。但是,考虑到扩展可以使用它们想要的任何节点模块或运行时,有时可能需要进行调整。我们建议你测试你的扩展,以确保不需要更新。有关详细信息,请参阅支持远程开发

问题或反馈

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