Scrivere ed eseguire il debug di codice in esecuzione con Ricaricamento rapido in Visual Studio (C#, Visual Basic, C++)

A partire da Visual Studio 2022, l'esperienza di Ricaricamento rapido in Visual Studio funziona sia per le app .NET gestite che per le app C++ native. Indipendentemente dal tipo di app su cui si sta lavorando, l'intenzione di Ricaricamento rapido è di risparmiare il maggior numero possibile di riavvii dell'app tra le modifiche, riducendo il tempo atteso per la ricompilazione, il riavvio, il passaggio alla posizione precedente in cui ci si trovava nell'app stessa, et al.

A tale scopo, è possibile modificare i file di codice dell'applicazione e applicare immediatamente le modifiche al codice all'applicazione in esecuzione, note anche come Ricaricamento rapido. Dopo aver applicato le modifiche, ripetere l'esecuzione del codice eseguendo un'azione nell'app stessa (o tramite una sorta di timer e così via) e visualizzare immediatamente le modifiche; non è necessaria alcuna sospensione dell'app tramite punti di interruzione.

Aggiornare il codice in esecuzione con Ricaricamento rapido

  1. Aprire un progetto in base a un tipo di applicazione supportato. Vedere Applicazioni supportate da .NET e C++ .

  2. Avviare l'app con il debugger collegato usando F5 o, se supportato, CTRL+F5.

  3. Aprire un file di codice e modificare il codice.

  4. Applicare le modifiche al codice usando il pulsante Ricaricamento rapido oppure premere ALT+F10.

    Screenshot of the Hot Reload button.

Per visualizzare le modifiche nell'interfaccia utente, è necessario eseguire di nuovo il codice. Ad esempio, il code-behind per un pulsante deve essere eseguito nuovamente o il codice che viene attivato a intervalli tramite un timer. Come altro esempio, ASP.NET Core supporta l'aggiornamento automatico del browser a causa della funzionalità MetadataUpdateHandler .

Supporto per le applicazioni .NET

  • Quando si usa Visual Studio 2022 e si avvia l'app con il debugger, l'esperienza di base Ricaricamento rapido funziona con la maggior parte dei tipi di app e versioni del framework .NET. Sono inclusi .NET Framework, .NET Core e .NET 5+ (sia per C# che per Visual Basic in base alle esigenze). L'aspettativa in questo scenario è che, se si usa il debugger, si supponga che Ricaricamento rapido sia disponibile e provare.
  • Quando si usa Visual Studio 2022 ma non si usa il debugger (ad esempio, usando CTRL-F5 per avviare l'app), Ricaricamento rapido è disponibile quando la destinazione è la maggior parte dei tipi di app .NET 6. Ciò significa che le app non destinate a .NET 6 (.NET 5 o versioni successive) non supportano lo scenario "no debugger" e devono usare il debugger per ottenere Ricaricamento rapido supporto.
  • Quando si usa Visual Studio 2022 con un'app .NET 6, la maggior parte degli scenari è supportata. Questa funzionalità non è limitata alla nuova funzionalità "nessun debugger" menzionata in precedenza. Include anche altre nuove funzionalità, ad esempio il supporto per il ricaricamento rapido di progetti Blazor e, più in generale, la modifica di file Razor in qualsiasi app core ASP.NET e css Ricaricamento rapido. L'uso di Visual Studio 2022 e delle app destinate a .NET 6 offre l'esperienza di Ricaricamento rapido più potente.

La tabella seguente illustra i progetti che supportano .NET Ricaricamento rapido con il debugger collegato (F5) e senza il debugger collegato (CTRL+F5), in base alla versione minima di .NET necessaria per il supporto in Visual Studio 2022 (17.8).

Tipo di applicazione F5 Ctrl+F5 Supporto di MetadataUpdateHandler
Console .NET 6 .NET 6
Esecuzione in Linux/macOS
(Docker e WSL)
.NET 8 .NET 6 .NET 8
Esecuzione su Arm64 .NET 7 .NET 7 .NET 7
WPF .NET 6 .NET 6
WinForms .NET 6 .NET 6
ASP.NET .NET 6 .NET 6
Blazor Server .NET 6 .NET 6 .NET 6
WebAssembly Blazor .NET 6 .NET 6 .NET 6
MAUI
(WinUI/Android/iOS)
.NET 6 -- --

I tipi di modifiche che è possibile apportare con Ricaricamento rapido sono determinati dal runtime e dalla versione del compilatore, non dal metodo usato per avviare l'applicazione (F5 o CTRL+F5).

Nelle sezioni seguenti si esaminerà il riepilogo precedente e si esamineranno altri dettagli.

Supporto per applicazioni C++

Quando si usa Visual Studio 2022 e si avvia l'app con il debugger, è possibile ricaricare a caldo un'applicazione C++ nativa durante l'esecuzione nel debugger (F5) usando il pulsante Ricaricamento rapido. Ricaricamento rapido è supportato anche per le app compilate con progetti CMake e OpenFolder.

Affinché il progetto supporti Ricaricamento rapido, è necessario:

  • Le proprietà del progetto > C/C++ > General> Debug Information Format devono essere impostate su "Program Database for Edit and Continue/ZI">
  • Il linker > proprietà progetto Generale >Abilita collegamento incrementale deve essere impostato su "Sì/INCREMENTAL">>

Per le modifiche supportate, vedere Modifiche al codice supportate da C++.

Visual Studio 2022 con un'app .NET quando si usa il debugger

Quando si usa Visual Studio 2022 e si avvia l'app con il debugger, Ricaricamento rapido funziona con la maggior parte dei framework app.

Ovunque si disponga di .NET e si usa il debugger gestito di Visual Studio, è consigliabile ottenere il supporto di base Ricaricamento rapido. Questo significa che anche i progetti come Funzioni di Azure funzionano bene in questo scenario.

Nota

Alcuni progetti usano per impostazione predefinita il debug in modalità mista, che non supporta Ricaricamento rapido. È possibile modificarlo nelle impostazioni del progetto impostando Project > Properties > Debug > Open debug launch profiles UI > Enable native code debugging (Abilita debug del codice nativo) su false.

Visual Studio 2022 con un'app .NET, ma non usando il debugger

Ricaricamento rapido è disponibile senza il debugger quando la destinazione è la maggior parte dei tipi di app .NET 6+.

Questa funzionalità è esclusiva di .NET 6+. Tali app non destinate a .NET 6+ (ovvero .NET 5 o versioni successive) non supporteranno lo scenario "no debugger" e devono usare il debugger per ottenere l'accesso alle funzionalità di Ricaricamento rapido.

Tenere inoltre presente che non tutti i tipi di progetto supportano attualmente lo scenario "no debugger", vedere Supporto per le applicazioni .NET.

Visual Studio 2022 con un'app .NET 6+

Se si usano sia Visual Studio 2022 che si usano app destinate a .NET 6+, si ottengono i vantaggi dell'esperienza di Ricaricamento rapido più lucida e capace.

Supportato in questo scenario:

  • App Blazor (Server e WebAssembly)
  • Modifica di file Razor sia nei siti Web Blazor che nei normali siti Web di ASP.NET Core
  • Css Ricaricamento rapido
  • Ricaricamento rapido XAML
  • Ricaricamento rapido supporto durante l'esecuzione di app senza il debugger (come descritto in precedenza in modo più dettagliato)

Se si usa .NET 6+, si continuano a ottenere miglioramenti nei prossimi aggiornamenti di Visual Studio 2022 e nelle versioni principali e della banda delle funzionalità .NET.

Scenari di base di ASP.NET supportati

L'esperienza di base Ricaricamento rapido è supportata per molti scenari di ASP.NET. La funzionalità più disponibile è la possibilità di modificare il code-behind e altri file di classe .NET per la maggior parte dei tipi di applicazioni Web. Questa funzionalità funziona durante l'uso del debugger di Visual Studio ed è presente in qualsiasi punto Ricaricamento rapido disponibile in precedenza. Per indicazioni più specifiche, vedere Supporto di .NET Ricaricamento rapido per ASP.NET Core.

Per gli sviluppatori di ASP.NET Core destinati a .NET 6+, non sono disponibili funzionalità aggiuntive per le versioni precedenti di .NET. Tali funzionalità includono:

  • CSHTML: la modifica di un file CSHTML Razor supporta molti tipi di modifiche.
  • Aggiornamento del browser: la modifica di un file razor aggiorna automaticamente le modifiche nel Web browser durante il debug. Questa funzionalità era disponibile in precedenza solo all'avvio dell'app senza il debugger.
  • CSS Ricaricamento rapido: è possibile modificare i file CSS durante l'esecuzione dell'app e le modifiche vengono applicate immediatamente all'app in esecuzione durante la digitazione.
  • Nessun debugger: si ottiene Ricaricamento rapido supporto quando si usa Visual Studio per avviare l'app Web senza il debugger (CTRL-F5).

Modifiche di .NET supportate

L'esperienza di Ricaricamento rapido .NET è basata sul debugger e sul compilatore C# (Roslyn). Roslyn supporta le modifiche e Le modifiche al codice supportate (C# e VB) elencano i tipi di modifiche attualmente supportate e potenziali miglioramenti futuri.

Progetti .NET non supportati

Ricaricamento rapido non è disponibile in alcune configurazioni del progetto:

  • Se si usa Visual Studio senza il debugger, Ricaricamento rapido funziona solo per le app .NET destinate a .NET 6+.
  • Se si usa il debugger di Visual Studio per eseguire l'app, ma è stata disabilitata Enable Hot Reload and Edit and Continue when debugging nelle impostazioni, Ricaricamento rapido non è supportata.
  • Le configurazioni di versione o di compilazione personalizzate non sono supportate. Il progetto deve usare la configurazione di Debug compilazione.
  • Se si ha come destinazione un progetto F# o .NET Native.
  • Alcune ottimizzazioni di avvio o compilazione non sono supportate in .NET Ricaricamento rapido. Ad esempio, se il profilo di debug del progetto è configurato nei modi seguenti, .NET Ricaricamento rapido non è supportato:
    • Il trimming è abilitato per il progetto. Ad esempio, non è supportato se PublishTrimmed è impostato su True nel file di progetto per il profilo di debug.
    • ReadyToRun è abilitato per il progetto. Ad esempio, non è supportato se PublishReadyToRun è impostato su True nel file di progetto per il profilo di debug.

Per altri dettagli, vedere Scenari non supportati.

Configurare Ricaricamento rapido

Per abilitare, disabilitare o configurare Ricaricamento rapido, vedere Configurare modifica e continuazione.

Messaggio di avviso

Se viene visualizzata la finestra di dialogo seguente, Ricaricamento rapido non è in grado di applicare le modifiche correnti senza riavviare. È possibile scegliere di ricompilare l'app e applicare le modifiche (riavvio) o di continuare la modifica. Se si ricompila, tutto lo stato dell'applicazione viene perso. Se si continua a modificare, è possibile che modifiche o correzioni aggiuntive possano causare il funzionamento Ricaricamento rapido.

Screenshot of the apply changes dialog box

Se si seleziona l'opzione Ricompila sempre quando non è possibile applicare le modifiche nella finestra di dialogo, non verrà visualizzata di nuovo la finestra di dialogo nella sessione corrente di Visual Studio e Visual Studio ricompila e ricarica automaticamente anziché visualizzare la finestra di dialogo.

Risoluzione dei problemi

È consigliabile verificare la presenza della finestra di output Ricaricamento rapido per informazioni di diagnostica dettagliate relative alla sessione di Ricaricamento rapido.

Se si usa la compressione delle risposte in .NET Core, vedere le informazioni sulla compressione delle risposte.