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

# C#, .NET e CPP

> Guida di configurazione per lo sviluppo in C#, .NET Core, .NET Framework (Mono) e C++ in Devin Desktop con strumenti open source come OmniSharp, clangd e LLDB.

<div id="devin-desktop-development-environment-setup-guide">
  # Guida alla configurazione dell'ambiente di sviluppo di Devin Desktop
</div>

<div id="overview">
  ## Panoramica
</div>

I workspace di Devin Desktop si basano **esclusivamente su strumenti open source** per la compilazione, il linting e il debug. I componenti proprietari di Microsoft Visual Studio non possono essere ridistribuiti, quindi integriamo invece language server, debugger e compilatori mantenuti dalla community.

Questa guida copre due stack:

1. **.NET / C#** – per .NET Core e .NET Framework (tramite Mono)
2. **C / C++** – con strumenti basati su clang

Puoi installarne uno o entrambi nello stesso workspace.

> ⚠️ **Importante**: gli esempi riportati di seguito sono template che devi personalizzare per il tuo progetto specifico. Dovrai modificare i percorsi dei file, i nomi dei progetti e i comandi di build in modo che corrispondano alla tua codebase.

***

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

> **Scegli l'opzione più adatta alla tua codebase.**

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

**Estensioni:**

* **[C#](https://marketplace.windsurf.com/vscode/item?itemName=muhammad-sammy.csharp)** (`muhammad-sammy.csharp`) – include **OmniSharp LS** e **NetCoreDbg**, così puoi premere <kbd>F5</kbd> subito

* **[.NET Install Tool](https://marketplace.windsurf.com/vscode/item?itemName=ms-dotnettools.vscode-dotnet-runtime)** (`ms-dotnettools.vscode-dotnet-runtime`) – installa automaticamente i runtime/SDK mancanti

* **[Solution Explorer](https://marketplace.windsurf.com/vscode/item?itemName=fernandoescolar.vscode-solution-explorer)** (`fernandoescolar.vscode-solution-explorer`) – per navigare e gestire soluzioni e progetti .NET

**Debugger:** Non serve altro: l'estensione include già il language server e un debugger open source adatto a .NET Core.

**Build:** `dotnet build`

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

**Estensioni:**

* **[Mono Debug](https://marketplace.windsurf.com/vscode/item?itemName=chrisatwindsurf.mono-debug)** (`chrisatwindsurf.mono-debug`) – adattatore di debug per 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`) per le funzionalità del linguaggio

**Debugger:** **Devi anche installare la toolchain di Mono all'interno del workspace.** Segui la guida all'installazione nel [repo di Mono](https://gitlab.winehq.org/mono/mono#compilation-and-installation). L'estensione del debugger si connette a quel runtime durante il debug.

> **⚠️ Configurazione di .NET Framework**: Dopo aver installato Mono, per usare l'estensione C# con progetti .NET Framework, devi disattivare un'impostazione specifica nelle Settings dell'IDE. Vai in **Settings** (nella sezione dell'estensione C#) e disattiva **"Omnisharp: Use Modern Net"**. Questa impostazione usa la build di OmniSharp per .NET 6, che offre notevoli miglioramenti delle prestazioni per i progetti Framework in stile SDK, .NET Core e .NET 5+. Tieni presente che questa versione *non* supporta i progetti .NET Framework non in stile SDK, inclusi quelli di Unity.

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

<div id="configure-tasksjson-for-your-project">
  ### Configura `tasks.json` per il tuo progetto
</div>

**Devi creare o modificare `.vscode/tasks.json` nella radice del workspace** e personalizzare questi template:

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

<div id="configure-launchjson-for-debugging">
  ### Configura `launch.json` per il debug
</div>

**Devi creare/modificare `.vscode/launch.json` nella radice del workspace** e aggiornare i percorsi:

```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", // ← Modifica questo percorso
      "cwd": "${workspaceFolder}",
      "args": [] // Aggiungi argomenti della riga di comando se necessario
    },
    {
      "name": "Mono Launch",
      "type": "mono",
      "request": "launch",
      "preLaunchTask": "build-mono",
      "program": "${workspaceFolder}/YourProgram.exe", // ← Modifica questo percorso
      "cwd": "${workspaceFolder}"
    }
  ]
}
```

<div id="cli-equivalents">
  ### Equivalenti nella 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">
  ### Limitazioni di .NET Framework
</div>

⚠️ **Importante**: le codebase .NET Framework con assembly misti (C++/CLI) o dipendenze complesse da Visual Studio presentano limitazioni significative in Devin Desktop. In genere, queste codebase richiedono il sistema di build proprietario di Visual Studio e non possono essere compilate né sottoposte completamente a debug in Devin Desktop, a causa della dipendenza da strumenti specifici di Microsoft e della risoluzione dei riferimenti agli assembly.

**Approcci consigliati per i progetti .NET Framework:**

* Usa Devin Desktop insieme a Visual Studio per generare e modificare il codice
* Se possibile, migra le parti compatibili a .NET Core

***

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

**Estensioni richieste:**

| Estensione                                                                                                       | Scopo                                                                                                                                               |
| ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| **[Windsurf C++ Tools](https://open-vsx.org/extension/Codeium/windsurf-cpptools)** (`Codeium.windsurf-cpptools`) | È un bundle delle tre estensioni che consigliamo per iniziare. Include il supporto LSP per C/C++, il supporto per il debug e il supporto per CMake. |

> **Nota:** l'installazione del bundle Windsurf C++ Tools installerà automaticamente le singole estensioni elencate di seguito, quindi ti basta installare il bundle.

| Estensione                                                                                                                                          | Scopo                                                                                                                                               |
| --------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| **[clangd](https://marketplace.windsurf.com/vscode/item?itemName=llvm-vs-code-extensions.vscode-clangd)** (`llvm-vs-code-extensions.vscode-clangd`) | Integrazione con il language server **clangd**. Se `clangd` non è presente, verrà proposto di scaricare il binario corretto per la tua piattaforma. |
| **[CodeLLDB](https://marketplace.windsurf.com/extension/vadimcn/vscode-lldb)** (`vadimcn.vscode-lldb`)                                              | Debugger nativo basato su LLDB per codice C/C++ e Rust.                                                                                             |
| **[CMake Tools](https://marketplace.windsurf.com/vscode/item?itemName=ms-vscode.cmake-tools)** (`ms-vscode.cmake-tools`)                            | Integrazione per la configurazione del progetto, build, test e debug nei progetti basati su **CMake**.                                              |

Per i flussi di lavoro non basati su CMake, puoi comunque invocare `make`, `ninja` e così via tramite target personalizzati in `tasks.json`.

<div id="configure-cc-build-tasks">
  ### Configura le attività di build C/C++
</div>

**Crea o modifica `.vscode/tasks.json`** per il tuo progetto C/C++:

```jsonc theme={null}
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build-cpp",
      "type": "shell",
      "command": "clang++",
      "args": ["-g", "main.cpp", "-o", "main"], // ← Modifica in base ai tuoi file
      "group": "build",
      "problemMatcher": "$gcc"
    }
  ]
}
```

***

<div id="3-notes-gotchas">
  ## 3. Note e avvertenze
</div>

* **Solo open source** – rifiuta qualsiasi richiesta di installare strumenti Microsoft proprietari; i container di Devin Desktop non possono includerli.
* **Container vs host** – SDK e compilatori devono essere presenti **all'interno** del container del workspace di Devin Desktop.
* **Scorciatoie da tastiera**
  * <kbd>Ctrl/⌘ + Shift + B</kbd> → compila usando l'attività di build attiva
  * <kbd>F5</kbd> → avvia il debug usando la configurazione `launch.json` selezionata

***

<div id="4-setup-checklist">
  ## 4. Checklist di configurazione
</div>

* Installa le estensioni richieste per il tuo stack di linguaggi
* **Crea e personalizza** `.vscode/tasks.json` con i comandi di build del progetto
* **Crea e personalizza** `.vscode/launch.json` con i percorsi corretti per gli eseguibili
* Per Mono: installa il runtime e verifica `mono --version`
* Aggiorna i percorsi dei file, i nomi dei progetti e gli argomenti di build in base alla codebase del progetto
* Verifica la configurazione: premi <kbd>Ctrl/⌘ + Shift + B</kbd> per eseguire la build, poi <kbd>F5</kbd> per avviare il debug

> 💡 **Suggerimento**: I file di configurazione sono specifici del progetto. Dovrai adattare gli esempi sopra per ogni workspace.
