> ## 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 e CPP

> Guia de configuração para desenvolvimento em C#, .NET Core, .NET Framework (Mono) e C++ no Windsurf usando ferramentas de código aberto como OmniSharp, clangd e LLDB.

<div id="windsurf-development-environment-setup-guide">
  # Guia de configuração do ambiente de desenvolvimento do Windsurf
</div>

<div id="overview">
  ## Visão geral
</div>

Os workspaces do Windsurf dependem **exclusivamente de ferramentas open source** para compilação, linting e depuração. Os componentes proprietários do Visual Studio, da Microsoft, não podem ser redistribuídos; por isso, integramos servidores de linguagem, depuradores e compiladores mantidos pela comunidade.

Este guia aborda duas stacks:

1. **.NET / C#** – com suporte tanto ao .NET Core quanto ao .NET Framework (via Mono)
2. **C / C++** – usando ferramentas baseadas em clang

Você pode instalar uma ou ambas no mesmo workspace.

> ⚠️ **Importante**: Os exemplos abaixo são modelos que você deve ajustar ao seu projeto. Será necessário editar caminhos de arquivos, nomes de projetos e comandos de build para corresponder ao seu codebase.

***

<div id="1-net-c-development">
  ## 1. Desenvolvimento em .NET / C\#
</div>

> **Escolha a variante que corresponde ao seu código.**

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

**Extensões:**

* **[C#](https://marketplace.windsurf.com/vscode/item?itemName=muhammad-sammy.csharp)** (`muhammad-sammy.csharp`) – inclui **OmniSharp LS** e **NetCoreDbg**, para você poder apertar <kbd>F5</kbd> imediatamente

* **[.NET Install Tool](https://marketplace.windsurf.com/vscode/item?itemName=ms-dotnettools.vscode-dotnet-runtime)** (`ms-dotnettools.vscode-dotnet-runtime`) – instala automaticamente runtimes/SDKs ausentes

* **[Solution Explorer](https://marketplace.windsurf.com/vscode/item?itemName=fernandoescolar.vscode-solution-explorer)** (`fernandoescolar.vscode-solution-explorer`) – navegue e gerencie soluções e projetos .NET

**Depurador:** Nada mais é necessário — a extensão já inclui o servidor de linguagem e um depurador open source adequado para .NET Core.

**Build:** `dotnet build`

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

**Extensões:**

* **[Mono Debug](https://marketplace.windsurf.com/vscode/item?itemName=chrisatwindsurf.mono-debug)** (`chrisatwindsurf.mono-debug`) – adaptador de depuração para 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`) para recursos da linguagem

**Depurador:** **Você também deve instalar a toolchain do Mono dentro do workspace.** Siga o guia de instalação no [repositório do Mono](https://gitlab.winehq.org/mono/mono#compilation-and-installation). A extensão do depurador se conecta a esse runtime no momento da depuração.

> **⚠️ Configuração do .NET Framework**: Após instalar o Mono, para usar a extensão C# com projetos .NET Framework, é preciso alterar uma configuração específica nas configurações do IDE. Acesse **Settings** (na seção da extensão C#) e desative **“Omnisharp: Use Modern Net”**. Essa configuração usa o build do OmniSharp para .NET 6, que oferece melhorias significativas de desempenho para projetos no estilo SDK, .NET Core e .NET 5+. Observe que essa versão *não* oferece suporte a projetos .NET Framework que não sejam no estilo SDK, incluindo Unity.

**Build:** `mcs Program.cs`

<div id="configure-tasksjson-for-your-project">
  ### Configure `tasks.json` para o seu projeto
</div>

**Você deve criar/editar `.vscode/tasks.json` na raiz do seu workspace** e personalizar os seguintes templates:

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

<div id="configure-launchjson-for-debugging">
  ### Configurar o `launch.json` para depuração
</div>

**Você deve criar/editar `.vscode/launch.json` na raiz do seu workspace** e atualizar os caminhos:

```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", // ← Edite este caminho
      "cwd": "${workspaceFolder}",
      "args": [] // Adicione argumentos de linha de comando, se necessário
    },
    {
      "name": "Mono Launch",
      "type": "mono",
      "request": "launch",
      "preLaunchTask": "build-mono",
      "program": "${workspaceFolder}/YourProgram.exe", // ← Edite este caminho
      "cwd": "${workspaceFolder}"
    }
  ]
}
```

<div id="cli-equivalents">
  ### Equivalentes na 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">
  ### Limitações do .NET Framework
</div>

⚠️ **Importante**: bases de código em .NET Framework com assemblies mistos (C++/CLI) ou dependências complexas do Visual Studio têm limitações significativas no uso do Windsurf. Essas bases de código normalmente exigem o sistema de build proprietário do Visual Studio e não podem ser totalmente compiladas ou depuradas no Windsurf devido a dependências em ferramentas específicas da Microsoft e à resolução de referências de assemblies.

**Abordagens recomendadas para projetos .NET Framework:**

* Use o Windsurf em conjunto com o Visual Studio para geração e edição de código
* Migre partes compatíveis para .NET Core sempre que possível

***

<div id="2-c-c-development">
  ## 2. Desenvolvimento em C / C++
</div>

**Extensões necessárias:**

| Extensão                                                                                                         | Finalidade                                                                                                                 |
| ---------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| **[Windsurf C++ Tools](https://open-vsx.org/extension/Codeium/windsurf-cpptools)** (`Codeium.windsurf-cpptools`) | Conjunto com as três extensões que recomendamos para começar. Pacote que inclui suporte LSP para C/C++, depuração e CMake. |

> **Observação:** Ao instalar o pacote Windsurf C++ Tools, as extensões individuais abaixo serão instaladas automaticamente; portanto, basta instalar o pacote.

| Extensão                                                                                                                                            | Finalidade                                                                                                                                              |
| --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **[clangd](https://marketplace.windsurf.com/vscode/item?itemName=llvm-vs-code-extensions.vscode-clangd)** (`llvm-vs-code-extensions.vscode-clangd`) | Integração com o servidor de linguagem **clangd**. Se `clangd` não estiver instalado, será oferecido o download do binário correto para sua plataforma. |
| **[CodeLLDB](https://marketplace.windsurf.com/extension/vadimcn/vscode-lldb)** (`vadimcn.vscode-lldb`)                                              | Depurador nativo baseado em LLDB para código C/C++ e Rust.                                                                                              |
| **[CMake Tools](https://marketplace.windsurf.com/vscode/item?itemName=ms-vscode.cmake-tools)** (`ms-vscode.cmake-tools`)                            | Integração de configuração de projeto, compilação, testes e depuração para projetos baseados em **CMake**.                                              |

Para fluxos de trabalho sem CMake, você ainda pode chamar `make`, `ninja`, etc. por meio de alvos personalizados em `tasks.json`.

<div id="configure-cc-build-tasks">
  ### Configurar tarefas de build de C/C++
</div>

**Crie/edite `.vscode/tasks.json`** para o seu projeto em C/C++:

```jsonc theme={null}
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build-cpp",
      "type": "shell",
      "command": "clang++",
      "args": ["-g", "main.cpp", "-o", "main"], // ← Edite para os seus arquivos
      "group": "build",
      "problemMatcher": "$gcc"
    }
  ]
}
```

***

<div id="3-notes-gotchas">
  ## 3. Observações e Armadilhas
</div>

* **Apenas código aberto** – recuse qualquer solicitação para instalar ferramentas proprietárias da Microsoft; os contêineres do Windsurf não podem incluí‑las.
* **Contêiner vs Host** – SDKs/compiladores precisam estar presentes **dentro** do contêiner de workspace do Windsurf.
* **Atalhos de teclado**
  * <kbd>Ctrl/⌘ + Shift + B</kbd> → compilar usando a tarefa de build ativa
  * <kbd>F5</kbd> → depurar usando a configuração `launch.json` selecionada

***

<div id="4-setup-checklist">
  ## 4. Lista de verificação de configuração
</div>

* Instale as extensões necessárias para sua stack de linguagem
* **Crie e personalize** `.vscode/tasks.json` com os comandos de build do seu projeto
* **Crie e personalize** `.vscode/launch.json` com os caminhos corretos para seus executáveis
* Para Mono: instale o runtime e verifique `mono --version`
* Atualize caminhos de arquivos, nomes de projeto e argumentos de build para corresponder ao seu codebase
* Teste sua configuração: pressione <kbd>Ctrl/⌘ + Shift + B</kbd> para compilar e depois <kbd>F5</kbd> para depurar

> 💡 **Dica**: Os arquivos de configuração são específicos do projeto. Você precisará adaptar os exemplos acima para cada workspace.
