> ## Documentation Index
> Fetch the complete documentation index at: https://docs.windsurf.com/llms.txt
> Use this file to discover all available pages before exploring further.

# C#、.NET 和 CPP

> 在 Windsurf 中使用 OmniSharp、clangd、LLDB 等开源工具进行 C#、.NET Core、.NET Framework（Mono）和 C++ 开发的配置指南。

<div id="windsurf-development-environment-setup-guide">
  # Windsurf 开发环境搭建指南
</div>

<div id="overview">
  ## 概览
</div>

Windsurf 工作区在编译、代码规范检查和调试方面**仅依赖开源工具链**。由于 Microsoft 的专有 Visual Studio 组件无法再分发，我们改为集成由社区维护的语言服务器、调试器和编译器。

本指南涵盖两套技术栈：

1. **.NET / C#** —— 同时支持 .NET Core 和 .NET Framework（通过 Mono）
2. **C / C++** —— 使用基于 clang 的工具链

你可以在同一工作区中安装其中任意一种，或两者同时安装。

> ⚠️ **重要**：以下示例为模板，需根据你的具体项目进行定制。请修改文件路径、项目名称和构建命令以匹配你的代码库。

***

<div id="1-net-c-development">
  ## 1. .NET / C# 开发
</div>

> **请选择与您的代码库相匹配的变体。**

<div id="net-core-net-6">
  ### .NET Core / .NET 6+
</div>

**扩展：**

* **[C#](https://marketplace.windsurf.com/vscode/item?itemName=muhammad-sammy.csharp)** (`muhammad-sammy.csharp`) – 集成 **OmniSharp LS** 和 **NetCoreDbg**，可直接按 <kbd>F5</kbd> 运行

* **[.NET Install Tool](https://marketplace.windsurf.com/vscode/item?itemName=ms-dotnettools.vscode-dotnet-runtime)** (`ms-dotnettools.vscode-dotnet-runtime`) – 自动安装缺失的运行时/SDK

* **[Solution Explorer](https://marketplace.windsurf.com/vscode/item?itemName=fernandoescolar.vscode-solution-explorer)** (`fernandoescolar.vscode-solution-explorer`) – 浏览和管理 .NET 解决方案与项目

**调试器：** 无需其他组件——该扩展已内置语言服务器和适用于 .NET Core 的开源调试器。

**构建：** `dotnet build`

<div id="net-framework-via-mono">
  ### 通过 Mono 使用 .NET Framework
</div>

**扩展：**

* **[Mono Debug](https://marketplace.windsurf.com/vscode/item?itemName=chrisatwindsurf.mono-debug)** (`chrisatwindsurf.mono-debug`) – Mono 的调试适配器（[Open VSX](https://open-vsx.org/extension/chrisatwindsurf/mono-debug)）
* **[C#](https://marketplace.windsurf.com/vscode/item?itemName=muhammad-sammy.csharp)** (`muhammad-sammy.csharp`) 提供语言功能

**调试器：** **还必须在工作区内安装 Mono 工具链。** 请按照 [Mono 仓库](https://gitlab.winehq.org/mono/mono#compilation-and-installation)中的安装指南进行安装。调试器扩展会在调试时连接到该运行时。

> **⚠️ .NET Framework 配置**：安装 Mono 后，如需在 .NET Framework 项目中使用 C# 扩展，需要在 IDE 设置中切换一项特定设置。前往 **Settings**（C# Extension 部分），关闭 **"Omnisharp: Use Modern Net"**。该设置使用针对 .NET 6 的 OmniSharp 构建，可为 SDK 风格的 Framework、.NET Core 和 .NET 5+ 项目带来显著性能提升。请注意，该版本不支持非 SDK 风格的 .NET Framework 项目（包括 Unity）。

**构建：** `mcs Program.cs`

<div id="configure-tasksjson-for-your-project">
  ### 为你的项目配置 `tasks.json`
</div>

**你必须在工作区根目录创建或编辑 `.vscode/tasks.json`**，并自定义以下模板：

```jsonc theme={null}
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build-dotnet",
      "type": "shell",
      "command": "dotnet",
      "args": ["build", "YourProject.csproj"], // ← 编辑这里
      "group": "build",
      "problemMatcher": "$msCompile"
    },
    {
      "label": "build-mono",
      "type": "shell",
      "command": "mcs",
      "args": ["YourProgram.cs"], // ← 编辑这里
      "group": "build"
    }
  ]
}
```

<div id="configure-launchjson-for-debugging">
  ### 为调试配置 `launch.json`
</div>

**必须在工作区根目录下创建或编辑 `.vscode/launch.json`**，并更新其中的路径：

```jsonc theme={null}
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": ".NET Core Launch",
      "type": "coreclr",
      "request": "launch",
      "preLaunchTask": "build-dotnet",
      "program": "${workspaceFolder}/bin/Debug/net6.0/YourApp.dll", // ← 编辑此路径
      "cwd": "${workspaceFolder}",
      "args": [] // Add command line arguments if needed
    },
    {
      "name": "Mono Launch",
      "type": "mono",
      "request": "launch",
      "preLaunchTask": "build-mono",
      "program": "${workspaceFolder}/YourProgram.exe", // ← Edit this path
      "cwd": "${workspaceFolder}"
    }
  ]
}
```

<div id="cli-equivalents">
  ### CLI 对应命令
</div>

```bash theme={null}
# .NET Core
$ dotnet build
$ dotnet run

# Mono / .NET Framework
$ mcs Program.cs
$ mono Program.exe
```

<div id="net-framework-limitations">
  ### .NET Framework 限制
</div>

⚠️ **重要**：包含混合程序集（C++/CLI）或对 Visual Studio 有复杂依赖的 .NET Framework 代码库在 Windsurf 中存在较大限制。这类代码库通常依赖 Visual Studio 的专有构建系统，并且由于依赖 Microsoft 专用工具链和程序集引用解析，无法在 Windsurf 中进行完整的编译或调试。

**针对 .NET Framework 项目的推荐做法：**

* 将 Windsurf 与 Visual Studio 搭配使用，用于代码生成和编辑
* 在可行的情况下，将兼容部分迁移到 .NET Core

***

<div id="2-c-c-development">
  ## 2. C / C++ 开发
</div>

**必备扩展：**

| 扩展                                                                                                               | 目的                                               |
| ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
| **[Windsurf C++ Tools](https://open-vsx.org/extension/Codeium/windsurf-cpptools)** (`Codeium.windsurf-cpptools`) | 我们推荐的入门三件套扩展合集。包含 C/C++ 的 LSP 支持、调试支持和 CMake 支持。 |

> \*\*注意：\*\*安装 Windsurf C++ Tools 合集会自动安装下方列出的各个扩展，因此你只需安装该合集即可。

| 扩展                                                                                                                                                  | 目的                                                     |
| --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
| **[clangd](https://marketplace.windsurf.com/vscode/item?itemName=llvm-vs-code-extensions.vscode-clangd)** (`llvm-vs-code-extensions.vscode-clangd`) | **clangd** 语言服务器集成。如果未安装 `clangd`，它会提示为你的平台下载正确的二进制文件。 |
| **[CodeLLDB](https://marketplace.windsurf.com/extension/vadimcn/vscode-lldb)** (`vadimcn.vscode-lldb`)                                              | 基于 LLDB 的原生调试器，适用于 C/C++ 和 Rust 代码。                    |
| **[CMake Tools](https://marketplace.windsurf.com/vscode/item?itemName=ms-vscode.cmake-tools)** (`ms-vscode.cmake-tools`)                            | 为基于 **CMake** 的项目提供项目配置、构建、测试与调试集成。                    |

对于非 CMake 的工作流，你仍然可以通过自定义的 `tasks.json` 任务调用 `make`、`ninja` 等。

<div id="configure-cc-build-tasks">
  ### 配置 C/C++ 构建任务
</div>

为你的 C/C++ 项目**创建或编辑 `.vscode/tasks.json`**：

```jsonc theme={null}
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build-cpp",
      "type": "shell",
      "command": "clang++",
      "args": ["-g", "main.cpp", "-o", "main"], // ← 请根据您的文件修改
      "group": "build",
      "problemMatcher": "$gcc"
    }
  ]
}
```

***

<div id="3-notes-gotchas">
  ## 3. 注意事项与易错点
</div>

* **仅限开源** – 拒绝任何安装微软专有工具的提示；Windsurf 容器无法随容器一同分发此类工具。
* **容器 vs 主机** – SDK/编译器必须安装在 Windsurf 工作区容器**内部**。
* **键盘快捷键**
  * <kbd>Ctrl/⌘ + Shift + B</kbd> → 使用当前活动的构建任务进行编译
  * <kbd>F5</kbd> → 使用选定的 `launch.json` 配置进行调试

***

<div id="4-setup-checklist">
  ## 4. 设置清单
</div>

* 为你的语言栈安装所需扩展
* **创建并自定义** `.vscode/tasks.json`，添加项目的构建命令
* **创建并自定义** `.vscode/launch.json`，配置可执行文件的正确路径
* 对于 Mono：安装运行时并通过 `mono --version` 验证
* 更新文件路径、项目名称和构建参数，使其与代码库一致
* 测试你的设置：按 <kbd>Ctrl/⌘ + Shift + B</kbd> 进行构建，然后按 <kbd>F5</kbd> 进行调试

> 💡 **提示**：这些配置文件是按项目划分的。你需要为每个工作区调整上述示例。
