> ## 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 et C++

> Guide de configuration pour le développement en C#, .NET Core, .NET Framework (Mono) et C++ dans Windsurf en utilisant des outils open source comme OmniSharp, clangd et LLDB.

<div id="windsurf-development-environment-setup-guide">
  # Guide de configuration de l’environnement de développement Windsurf
</div>

<div id="overview">
  ## Vue d’ensemble
</div>

Les workspaces Windsurf s’appuient **exclusivement sur des outils open source** pour la compilation, l’analyse statique et le débogage. Les composants propriétaires Visual Studio de Microsoft ne peuvent pas être redistribués ; nous intégrons donc à la place des servers de langage, des débogueurs et des compilateurs maintenus par la communauté.

Ce guide couvre deux piles technologiques :

1. **.NET / C#** – ciblant à la fois .NET Core et .NET Framework (via Mono)
2. **C / C++** – avec des outils basés sur clang

Vous pouvez installer l’un, l’autre ou les deux dans le même workspace.

> ⚠️ **Important** : Les exemples ci‑dessous sont des modèles que vous devez adapter à votre projet. Vous devrez modifier les chemins de fichiers, les noms de projet et les commandes de build pour correspondre à votre base de code.

***

<div id="1-net-c-development">
  ## 1. Développement .NET / C\#
</div>

> **Choisissez la variante qui correspond à votre codebase.**

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

**Extensions :**

* **[C#](https://marketplace.windsurf.com/vscode/item?itemName=muhammad-sammy.csharp)** (`muhammad-sammy.csharp`) – regroupe **OmniSharp LS** et **NetCoreDbg**, vous permettant d’appuyer sur <kbd>F5</kbd> immédiatement

* **[.NET Install Tool](https://marketplace.windsurf.com/vscode/item?itemName=ms-dotnettools.vscode-dotnet-runtime)** (`ms-dotnettools.vscode-dotnet-runtime`) – installe automatiquement les runtimes/SDK manquants

* **[Solution Explorer](https://marketplace.windsurf.com/vscode/item?itemName=fernandoescolar.vscode-solution-explorer)** (`fernandoescolar.vscode-solution-explorer`) – permet de naviguer et de gérer les solutions et projets .NET

**Débogueur :** Rien d’autre n’est nécessaire — l’extension inclut déjà le serveur de langage et un débogueur open source adapté à .NET Core.

**Build :** `dotnet build`

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

**Extensions :**

* **[Mono Debug](https://marketplace.windsurf.com/vscode/item?itemName=chrisatwindsurf.mono-debug)** (`chrisatwindsurf.mono-debug`) – adaptateur de débogage pour 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`) pour les fonctionnalités du langage

**Débogueur :** **Vous devez également installer la toolchain Mono dans le workspace.** Suivez le guide d’installation dans le [dépôt Mono](https://gitlab.winehq.org/mono/mono#compilation-and-installation). L’extension de débogage se connecte à ce runtime au moment du débogage.

> **⚠️ Configuration de .NET Framework** : Après avoir installé Mono, pour utiliser l’extension C# avec des projets .NET Framework, vous devez modifier un paramètre spécifique dans les paramètres de l’IDE. Allez dans **Settings** (dans la section C# Extension) et désactivez **"Omnisharp: Use Modern Net"**. Ce paramètre utilise la build OmniSharp pour .NET 6, qui offre des améliorations de performances significatives pour les projets Framework au format SDK, .NET Core et .NET 5+. Notez que cette version *ne* prend *pas* en charge les projets .NET Framework non au format SDK, y compris Unity.

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

<div id="configure-tasksjson-for-your-project">
  ### Configurer `tasks.json` pour votre projet
</div>

**Vous devez créer ou modifier `.vscode/tasks.json` à la racine de votre workspace** et adapter les modèles suivants :

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

<div id="configure-launchjson-for-debugging">
  ### Configurer le fichier `launch.json` pour le débogage
</div>

**Vous devez créer ou modifier `.vscode/launch.json` à la racine de votre workspace** et mettre à jour les chemins d’accès :

```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", // ← Modifiez ce chemin
      "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">
  ### Équivalents en ligne de commande
</div>

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

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

<div id="net-framework-limitations">
  ### Limitations de .NET Framework
</div>

⚠️ **Important** : les bases de code .NET Framework avec des assemblages mixtes (C++/CLI) ou des dépendances complexes vis-à-vis de Visual Studio présentent des limitations significatives dans Windsurf. Ces bases de code nécessitent généralement le système de build propriétaire de Visual Studio et ne peuvent pas être entièrement compilées ou déboguées dans Windsurf en raison de leurs dépendances sur les outils spécifiques de Microsoft et sur la résolution des références d’assembly.

**Approches recommandées pour les projets .NET Framework :**

* Utiliser Windsurf conjointement avec Visual Studio pour générer et modifier le code
* Migrer les parties compatibles vers .NET Core dans la mesure du possible

***

<div id="2-c-c-development">
  ## 2. Développement C/C++
</div>

**Extensions requises :**

| Extension                                                                                                        | Objectif                                                                                                                                                                                |
| ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **[Windsurf C++ Tools](https://open-vsx.org/extension/Codeium/windsurf-cpptools)** (`Codeium.windsurf-cpptools`) | Il s’agit d’un ensemble des trois extensions que nous recommandons pour bien démarrer. Ce package inclut la prise en charge LSP pour C/C++, le débogage et la prise en charge de CMake. |

> **Remarque :** L’installation du bundle Windsurf C++ Tools installera automatiquement les extensions individuelles ci‑dessous ; vous n’avez donc qu’à installer le bundle.

| Extension                                                                                                                                           | Objectif                                                                                                                                |
| --------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| **[clangd](https://marketplace.windsurf.com/vscode/item?itemName=llvm-vs-code-extensions.vscode-clangd)** (`llvm-vs-code-extensions.vscode-clangd`) | Intégration au serveur de langage **clangd**. Si `clangd` est absent, il proposera de télécharger le binaire adapté à votre plateforme. |
| **[CodeLLDB](https://marketplace.windsurf.com/extension/vadimcn/vscode-lldb)** (`vadimcn.vscode-lldb`)                                              | Débogueur natif basé sur LLDB pour le code C/C++ et Rust.                                                                               |
| **[CMake Tools](https://marketplace.windsurf.com/vscode/item?itemName=ms-vscode.cmake-tools)** (`ms-vscode.cmake-tools`)                            | Configuration de projet, compilation, test et intégration de débogage pour les projets basés sur **CMake**.                             |

Pour les workflows non CMake, vous pouvez toujours invoquer `make`, `ninja`, etc. via des cibles personnalisées dans `tasks.json`.

<div id="configure-cc-build-tasks">
  ### Configurer les tâches de build C/C++
</div>

**Créez/modifiez `.vscode/tasks.json`** pour votre projet C/C++ :

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

***

<div id="3-notes-gotchas">
  ## 3. Notes et points d'attention
</div>

* **Open‑source uniquement** – refusez toute demande d’installation d’outils Microsoft propriétaires ; les conteneurs Windsurf ne peuvent pas les inclure.
* **Conteneur vs hôte** – les SDK et compilateurs doivent être présents **à l'intérieur** du conteneur de workspace Windsurf.
* **Raccourcis clavier**
  * <kbd>Ctrl/⌘ + Shift + B</kbd> → compiler en utilisant la tâche de build active
  * <kbd>F5</kbd> → déboguer en utilisant la configuration `launch.json` sélectionnée

***

<div id="4-setup-checklist">
  ## 4. Liste de contrôle de la configuration
</div>

* Installez les extensions requises pour votre pile technologique
* **Créez et personnalisez** `.vscode/tasks.json` avec les commandes de compilation de votre projet
* **Créez et personnalisez** `.vscode/launch.json` avec les chemins corrects vers vos exécutables
* Pour Mono : installez le runtime et vérifiez `mono --version`
* Mettez à jour les chemins de fichiers, les noms de projet et les arguments de compilation pour correspondre à votre base de code
* Testez votre configuration : appuyez sur <kbd>Ctrl/⌘ + Shift + B</kbd> pour compiler, puis sur <kbd>F5</kbd> pour déboguer

> 💡 **Astuce** : Les fichiers de configuration sont spécifiques au projet. Vous devrez adapter les exemples ci-dessus pour chaque workspace.
