Condividi tramite


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 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 stai lavorando, l'intenzione di Hot Reload consiste nel risparmiarti quanti più riavvii dell'app possibile tra le modifiche, rendendoti più produttivo riducendo il tempo che trascorri aspettando che le app vengano ricompilate, riavviate e rinavigate alla posizione precedente in cui ti trovavi nell'app stessa, ecc.

Miglioriamo la produttività rendendo possibile modificare i file di codice dell'applicazione e applicare immediatamente le modifiche al codice all'applicazione in esecuzione, nota 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. Vedi le applicazioni supportate, .NET e C++.

  2. Avviare l'app con il debugger collegato usando F5 oppure 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 del pulsante Hot Reload.

Per visualizzare le modifiche nell'interfaccia utente, è necessario eseguire di nuovo il codice. Ad esempio, la logica del codice associata a un pulsante deve essere rieseguita, 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à di MetadataUpdateHandler.

Supporto per le applicazioni .NET

  • Quando si usa Visual Studio 2022 e si avvia l'app con il debugger, l'esperienza di ricaricamento rapido di base funziona con la maggior parte dei tipi di app e versioni del framework .NET. Questo supporto include .NET Framework, .NET Core e .NET 5+ (sia per C# che per Visual Basic, come applicabile). L'aspettativa in questo scenario è che, se usi il debugger, supponi che Hot Reload sia a tua disposizione e provalo!
  • Quando si usa Visual Studio 2022 ma non si usa il debugger (ad esempio, usando CTRL-F5 per avviare l'app), Hot Reload è disponibile quando si lavora con la maggior parte dei tipi di app .NET 6. In questo scenario, le app che non hanno come destinazione .NET 6+ (ovvero sono destinate a .NET 5 o versioni successive) non supportano lo scenario "no debugger" e devono usare il debugger per ottenere il supporto di Ricaricamento rapido.
  • Quando si usa Visual Studio 2022 con un'app .NET 6+, la maggior parte degli scenari è supportata. Questo supporto non è limitato alla nuova funzionalità "no debugger" menzionata in precedenza. Includa anche altre nuove funzionalità, come il supporto per il ricaricamento rapido dei progetti Blazor e, più in generale, la modifica di file Razor in qualsiasi app ASP.NET Core e "CSS Hot Reload." 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 il ricaricamento rapido .NET 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 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
Blazor WebAssembly .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 vengono forniti dettagli aggiuntivi.

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. Il ricaricamento rapido è supportato anche per le app compilate con progetti CMake e OpenFolder.

Affinché il progetto supporti il ricaricamento rapido, sono necessarie le opzioni seguenti:

  • Le proprietà del Progetto >> C/C++ > Generali >il formato delle informazioni di debug deve essere impostato su "Program Database for Edit and Continue /ZI"
  • Le proprietà di Project >> Linker > Generale >Abilitare il collegamento incrementale devono essere impostate su "Sì /INCREMENTAL"

Per le modifiche supportate, vedere C++ Supported Code Changes.

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

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

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

Nota

Per impostazione predefinita, alcuni progetti usano il debug in modalità mista, che non supporta il ricaricamento rapido. È possibile modificare questa impostazione nelle impostazioni del progetto, impostando Proprietà del Progetto >> Debug > Apri il profilo di avvio per il debug nell'interfaccia utente > e disabilitando l'opzione Debug del codice nativo su falso.

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

Hot Reload è disponibile senza il debugger quando si utilizzano la maggior parte dei tipi di app .NET 6+.

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

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

Visual Studio 2022 con un'app .NET 6+

Se si utilizzano sia Visual Studio 2022 che si lavora su app che puntano a .NET 6+, si ottengono i benefici dell'esperienza di Hot Reload più rifinita e avanzata.

Supportato in questo scenario:

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

Se si punta a .NET 6+, si continueranno a ottenere miglioramenti nei prossimi aggiornamenti di Visual Studio 2022 e nei gruppi di funzionalità e nelle versioni principali di .NET.

Scenari di base di ASP.NET supportati

L'esperienza di ricaricamento rapido di base è 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 ovunque fosse disponibile ricaricamento rapido in precedenza. Per indicazioni più specifiche, vedere supporto di ricaricamento rapido .NET 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. Queste funzionalità includono:

  • CSHTML: La modifica di un file Razor CSHTML supporta molti tipi di modifiche.
  • Aggiornamento del browser: La modifica di un file razor aggiorna automaticamente il browser web durante il debug. Questa funzionalità era disponibile in precedenza solo all'avvio dell'app senza il debugger.
  • Aggiornamento immediato CSS: Puoi modificare i file CSS mentre l'app è in esecuzione e le modifiche vengono applicate immediatamente all'app in esecuzione mentre digiti.
  • No Debugger: È possibile ottenere il supporto di Ricaricamento rapido 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 Modifiche al codice supportate (C# e VB) elencare 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, il 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 è stato disabilitato Enable Hot Reload and Edit and Continue when debugging nelle impostazioni, il Ricaricamento Rapido non è supportato.
  • Le configurazioni di versione o di compilazione personalizzate non sono supportate. Il progetto deve usare la configurazione di compilazione Debug.
  • Se si ha come destinazione un progetto F# o .NET Native.
  • Alcune ottimizzazioni di avvio o compilazione non sono supportate nel ricaricamento rapido di .NET. Ad esempio, se il profilo di debug del progetto è configurato nei modi seguenti, il ricaricamento rapido di .NET non è supportato:
    • Trimming è abilitato per il tuo 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 il ricaricamento rapido

Per abilitare, disabilitare o configurare Hot Reload, consultare Configurazione 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 continui a modificare, è possibile che modifiche o correzioni aggiuntive permettano al ricaricamento veloce di funzionare di nuovo.

Screenshot della finestra di dialogo Applica modifiche

Se si seleziona l'opzione Ricompilazione sempre quando le modifiche non possono essere applicate 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

È altamente consigliato controllare la finestra di output del Hot Reload per ottenere informazioni di diagnostica dettagliate relative alla sessione di Hot Reload.

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