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

> Guía de configuración para el desarrollo con C#, .NET Core, .NET Framework (Mono) y C++ en Windsurf utilizando herramientas de código abierto como OmniSharp, clangd y LLDB.

<div id="windsurf-development-environment-setup-guide">
  # Guía de configuración del entorno de desarrollo de Windsurf
</div>

<div id="overview">
  ## Descripción general
</div>

Los workspace de Windsurf dependen **exclusivamente de herramientas de código abierto** para compilar, realizar linting y depurar. Los componentes propietarios de Microsoft Visual Studio no pueden redistribuirse, por lo que integramos servidores de lenguaje, depuradores y compiladores mantenidos por la comunidad.

Esta guía cubre dos stacks:

1. **.NET / C#** – compatible con .NET Core y .NET Framework (a través de Mono)
2. **C / C++** – usando tooling basado en clang

Puedes instalar uno o ambos en el mismo workspace.

> ⚠️ **Importante**: Los ejemplos a continuación son plantillas que debes personalizar para tu proyecto. Deberás editar rutas de archivos, nombres de proyectos y comandos de compilación para que coincidan con tu base de código.

***

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

> **Elige la variante que se ajuste a tu código.**

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

**Extensiones:**

* **[C#](https://marketplace.windsurf.com/vscode/item?itemName=muhammad-sammy.csharp)** (`muhammad-sammy.csharp`) – incluye **OmniSharp LS** y **NetCoreDbg**, para que puedas pulsar <kbd>F5</kbd> de inmediato

* **[.NET Install Tool](https://marketplace.windsurf.com/vscode/item?itemName=ms-dotnettools.vscode-dotnet-runtime)** (`ms-dotnettools.vscode-dotnet-runtime`) – instala automáticamente los runtimes/SDK que falten

* **[Solution Explorer](https://marketplace.windsurf.com/vscode/item?itemName=fernandoescolar.vscode-solution-explorer)** (`fernandoescolar.vscode-solution-explorer`) – navega y gestiona soluciones y proyectos de .NET

**Depurador:** No se requiere nada más: la extensión ya incluye el servidor de lenguaje y un depurador de código abierto adecuado para .NET Core.

**Compilación:** `dotnet build`

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

**Extensiones:**

* **[Mono Debug](https://marketplace.windsurf.com/vscode/item?itemName=chrisatwindsurf.mono-debug)** (`chrisatwindsurf.mono-debug`) – adaptador de depuración 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 funciones del lenguaje

**Depurador:** **También debes instalar la cadena de herramientas de Mono dentro del workspace.** Sigue la guía de instalación en el [repositorio de Mono](https://gitlab.winehq.org/mono/mono#compilation-and-installation). La extensión del depurador se conecta a ese runtime durante la depuración.

> **⚠️ Configuración de .NET Framework**: Después de instalar Mono, para usar la extensión de C# con proyectos de .NET Framework, debes cambiar una configuración específica en los ajustes del IDE. Ve a **Settings** (en la sección de la extensión de C#) y desactiva **"Omnisharp: Use Modern Net"**. Esta configuración utiliza la compilación de OmniSharp para .NET 6, que ofrece mejoras de rendimiento significativas para proyectos de Framework con estilo SDK, .NET Core y .NET 5+. Ten en cuenta que esta versión *no* admite proyectos de .NET Framework sin estilo SDK, incluido Unity.

**Compilación:** `mcs Program.cs`

<div id="configure-tasksjson-for-your-project">
  ### Configura `tasks.json` para tu proyecto
</div>

**Debes crear o editar `.vscode/tasks.json` en la raíz de tu workspace** y personalizar estas plantillas:

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

<div id="configure-launchjson-for-debugging">
  ### Configurar `launch.json` para la depuración
</div>

**Debes crear o editar `.vscode/launch.json` en la raíz de tu workspace** y actualizar las rutas:

```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", // ← Edita esta ruta
      "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">
  ### Equivalentes en la 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">
  ### Limitaciones de .NET Framework
</div>

⚠️ **Importante**: Los proyectos de .NET Framework con ensamblados mixtos (C++/CLI) o dependencias complejas de Visual Studio tienen limitaciones significativas en Windsurf. Estos proyectos suelen requerir el sistema de compilación propietario de Visual Studio y no pueden compilarse ni depurarse por completo en Windsurf debido a su dependencia de herramientas específicas de Microsoft y de la resolución de referencias de ensamblados.

**Enfoques recomendados para proyectos de .NET Framework:**

* Usar Windsurf junto con Visual Studio para la generación y edición de código
* Migrar las partes compatibles a .NET Core cuando sea posible

***

<div id="2-c-c-development">
  ## 2. Desarrollo en C / C++
</div>

**Extensiones requeridas:**

| Extensión                                                                                                        | Propósito                                                                                                                    |
| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| **[Windsurf C++ Tools](https://open-vsx.org/extension/Codeium/windsurf-cpptools)** (`Codeium.windsurf-cpptools`) | Paquete con las tres extensiones recomendadas para empezar. Incluye soporte LSP para C/C++, depuración y soporte para CMake. |

> **Nota:** Al instalar el paquete Windsurf C++ Tools se instalarán automáticamente las extensiones individuales que se enumeran a continuación, por lo que solo necesitas instalar el paquete.

| Extensión                                                                                                                                           | Propósito                                                                                                                                     |
| --------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| **[clangd](https://marketplace.windsurf.com/vscode/item?itemName=llvm-vs-code-extensions.vscode-clangd)** (`llvm-vs-code-extensions.vscode-clangd`) | Integración con el servidor de lenguaje **clangd**. Si `clangd` no está instalado, ofrecerá descargar el binario adecuado para tu plataforma. |
| **[CodeLLDB](https://marketplace.windsurf.com/extension/vadimcn/vscode-lldb)** (`vadimcn.vscode-lldb`)                                              | Depurador nativo basado en LLDB para código C/C++ y Rust.                                                                                     |
| **[CMake Tools](https://marketplace.windsurf.com/vscode/item?itemName=ms-vscode.cmake-tools)** (`ms-vscode.cmake-tools`)                            | Integración para configurar proyectos, compilar, probar y depurar proyectos basados en **CMake**.                                             |

Para flujos de trabajo que no usan CMake, puedes seguir invocando `make`, `ninja`, etc., mediante tareas personalizadas en `tasks.json`.

<div id="configure-cc-build-tasks">
  ### Configura tareas de compilación de C/C++
</div>

**Crea o edita `.vscode/tasks.json`** para tu proyecto de C/C++:

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

***

<div id="3-notes-gotchas">
  ## 3. Notas y consideraciones
</div>

* **Solo código abierto** – no aceptes ninguna solicitud para instalar herramientas propietarias de Microsoft; los contenedores de Windsurf no pueden incluirlas.
* **Contenedor vs host** – los SDK y compiladores deben estar presentes **dentro** del contenedor del workspace de Windsurf.
* **Atajos de teclado**
  * <kbd>Ctrl/⌘ + Shift + B</kbd> → compilar con la tarea de compilación activa
  * <kbd>F5</kbd> → depurar con la configuración `launch.json` seleccionada

***

<div id="4-setup-checklist">
  ## 4. Lista de verificación de configuración
</div>

* Instala las extensiones necesarias para tu stack de lenguajes
* **Crea y personaliza** `.vscode/tasks.json` con los comandos de compilación de tu proyecto
* **Crea y personaliza** `.vscode/launch.json` con las rutas correctas a tus ejecutables
* Para Mono: instala el runtime y verifica `mono --version`
* Actualiza las rutas de archivos, los nombres de proyectos y los argumentos de compilación para que coincidan con tu código base
* Prueba tu configuración: presiona <kbd>Ctrl/⌘ + Shift + B</kbd> para compilar y luego <kbd>F5</kbd> para depurar

> 💡 **Consejo**: Los archivos de configuración son específicos del proyecto. Deberás adaptar los ejemplos anteriores para cada workspace.
