windows 下必须用 wsl2 运行 swift,因官方不支持原生 windows 工具链;需在 wsl2 中安装 swift、配置 path、通过 remote-wsl 打开项目,并用 swift run 或 tasks.json 构建执行。

VSCode 本身不能直接“运行 Swift 代码”,它必须调用系统级 swift 工具链执行编译和执行;在 Windows 上,官方不支持原生安装,**唯一可行路径是 WSL2 + Linux Swift 工具链**——试图在 Windows 原生环境(如 cmd/PowerShell)中配置 swiftc 或 sourcekit-lsp 会失败,因为 Swift 运行时、标准库和调试器均未为 Windows NT 内核提供二进制支持。
Windows 下必须用 WSL2,不是可选项
Swift 官方从不发布 Windows 原生工具链,所有“Windows Swift 安装包”(如某些第三方打包或旧版社区移植)均已停止维护,且无法通过 swift test 或 swift run 验证。你在 PowerShell 中运行 swift --version 成功,大概率只是符号链接或包装脚本,背后没真正 Swift 运行时。
- 安装 WSL2:以管理员身份运行 PowerShell,执行
wsl --install,重启后安装 Ubuntu 24.04(推荐) - 在 WSL2 中安装 Swift:访问
https://www.swift.org/download/#releases,下载swift-5.9-RELEASE-ubuntu24.04.tar.gz,解压到/opt/swift - 配置 PATH:向
~/.bashrc追加export PATH="/opt/swift/usr/bin:$PATH",然后运行source ~/.bashrc - 验证:在 WSL2 终端中运行
swift --version和sourcekit-lsp --help,两者都应正常输出
VSCode 必须通过 Remote - WSL 打开项目
你不能在 Windows 文件系统(如 C:\myproject)里打开 Swift 项目并指望插件工作。VSCode 的 Swift 插件(如 sschmid.Swift)只在 WSL2 环境下能加载 sourcekit-lsp,且只识别 Linux 路径语义。
- 在 WSL2 中创建项目目录,例如
~/swift-hello - 运行
swift package init --type executable生成Package.swift和Sources/ - 在 VSCode 中按
Ctrl+Shift+P,输入Remote-WSL: New Window,再用File > Open Folder打开~/swift-hello - 此时右下角状态栏应显示 “WSL: Ubuntu”,且 Swift 插件才会激活——若仍无语法高亮,检查是否手动设置了
swift.path.sourceKitLSP为/opt/swift/usr/bin/sourcekit-lsp
运行代码只能靠终端或 tasks.json,不是点击“运行”按钮
VSCode 没有内置 Swift 运行按钮。所谓“运行”,本质是调用 swift run 编译并执行,它依赖完整的构建上下文(.build/debug/ 目录),而该目录只能由 SPM 在 Linux 环境下生成。
- 最简方式:在 VSCode 集成终端(已处于 WSL2)中直接运行
swift run - 想用快捷键构建:在
.vscode/tasks.json中定义任务:{ "version": "2.0.0", "tasks": [ { "label": "swift build", "type": "shell", "command": "swift build", "group": "build", "presentation": { "echo": true, "reveal": "silent", "focus": false } } ] } - 不要尝试配置 launch.json 调试 Windows 可执行文件——
lldb在 WSL2 中调试的是 Linux ELF 二进制,不是 Windows PE 文件;调试必须指向.build/debug/YourTargetName
最容易被忽略的一点:WSL2 默认不继承宿主机的 GUI 或音频设备,但 Swift 本身不依赖这些;真正卡住的是环境变量隔离——LD_LIBRARY_PATH 必须在 WSL2 的 shell 配置中显式设置,否则 swift test 会报 unable to load standard library,哪怕 swift --version 看似正常。











