Condividi tramite


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

Ricaricamento rapido era precedentemente noto come "Edit and Continue" nella documentazione di Visual Studio e nel testo dell'interfaccia utente legacy.

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

Per migliorare la produttività, è 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 .NET e C++ applicazioni supportate.

  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 rapidoScreenshot dell'icona Ricaricamento rapido. oppure premere ALT+F10.

    Screenshot di Ricaricamento rapido.

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à MetadataUpdateHandler.

Supporto per 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. Questo supporto include .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 si provi ad usarlo.
  • 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. In questo scenario, le app che non hanno come destinazione .NET 6+ (ovvero .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. Questo supporto non è limitato 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 ASP.NET Core 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 la versione minima .NET necessaria per supportare .NET Ricaricamento rapido con il debugger collegato (F5) e senza il debugger collegato (CTRL+F5), in base al tipo di progetto. Visual Studio 2022 versione 17.8 o successiva è necessaria.

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
macchine virtuali Windows .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 .NET Framework

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. Questo supporto include .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 si provi ad usarlo.

Supporto per applicazioni C++

Quando si usa Visual Studio 2022 e si avvia l'app con il debugger, è possibile hot reload 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, sono necessarie le opzioni seguenti:

  • Project > Proprietà > C/C++ > General >Debug Information Format deve essere impostato su "Program Database for Edit and Continue /ZI"
  • Project > Proprietà > Linker > Generale >Abilita Collegamento Incrementale deve essere impostato su "Sì /INCREMENTAL"

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

Visual Studio 2022 con un'app di .NET o del .NET Framework, utilizzando 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 dell'app.

Ovunque si disponga di .NET e si usa il debugger gestito di Visual Studio, è consigliabile ottenere il supporto 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 Ricaricamento rapido. È possibile modificare questa impostazione nelle impostazioni di progetto impostando Proprietà del progetto > Debug > Apri interfaccia profili di avvio debug > Abilita debug del codice nativo su falso.

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

Ricaricamento rapido è disponibile senza il debugger per la maggior parte dei tipi di app .NET 6 e versioni successive.

Questa funzionalità è esclusiva per .NET 6+. Le app che non hanno come destinazione .NET 6 e versioni successive ,ovvero .NET 5 o versioni successive, non supportano lo scenario "no debugger" e devono usare il debugger per ottenere l'accesso alle funzionalità di Ricaricamento rapido.

Inoltre, non tutti i tipi di progetto attualmente supportano lo scenario "no debugger", vedere Support for .NET applications.

Visual Studio 2022 con un'app .NET 6+

Se usi sia Visual Studio 2022 che lavori su app destinate .NET 6+, ottieni i vantaggi dell'esperienza di Ricaricamento rapido più lucida e capace.

Supportato in questo scenario:

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

Se si utilizza .NET 6+, si continueranno a ricevere miglioramenti nei prossimi aggiornamenti di Visual Studio 2022 e nelle versioni delle funzionalità di .NET e nei rilasci principali.

Scenari di ASP.NET Core 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 è disponibile ovunque Ricaricamento rapido fosse precedentemente accessibile. Per indicazioni più specifiche, vedere .NET Ricaricamento rapido supporto per ASP.NET Core.

Per gli sviluppatori 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.
  • 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.
  • No Debugger: È possibile ottenere Ricaricamento rapido supporto quando si usa Visual Studio per avviare l'app Web senza il debugger (CTRL-F5).

Modifiche supportate di .NET

L'esperienza .NET Ricaricamento rapido è basata sul compilatore debugger e 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.

Modifiche supportate .NET Framework

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

Progetti .NET e .NET Framework 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 usi il debugger Visual Studio per eseguire l'app, ma hai disabilitato Enable Ricaricamento rapido and Edit and Continue when debugging nelle impostazioni, 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 in .NET Ricaricamento rapido. Ad esempio, se il profilo di debug del progetto è configurato nei modi seguenti, .NET Ricaricamento rapido 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.

Ricaricamento rapido non supportata nel caso di F#

Ricaricamento rapido, o Modifica e continuazione, non è supportato quando si esegue il debug del codice F#. Le modifiche al codice F# sono possibili durante una sessione di debug, ma devono essere evitate. Le modifiche al codice non vengono applicate durante la sessione di debug. Pertanto, tutte le modifiche apportate al codice F# mentre si esegue il debug genereranno codice sorgente che non corrisponde al codice sottoposto a debug.

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 continui a modificare, è possibile che modifiche o correzioni aggiuntive permettano a Ricaricamento rapido di funzionare nuovamente.

Screenshot della finestra di dialogo Applica modifiche.

Screenshot della finestra di dialogo Applica modifiche.

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

Risoluzione dei problemi

Se Ricaricamento rapido non funziona come previsto, verificare quanto segue:

  • Verificare di eseguire un'app e uno scenario supportati. Alcuni tipi di progetto, il debug in modalità mista, il codice ottimizzato e gli scenari di Attach to Process non supportano Ricaricamento rapido. Per altre informazioni, vedere Scenari non supportati.
  • Assicurarsi che l'app utilizzi una configurazione Debug e che Ricaricamento rapido sia abilitato in Strumenti>Opzioni>Debugging>.NET/C++ Ricaricamento rapido.
  • Impostare Logging Verbosity su Detailed o Diagnostic per ottenere altre informazioni nell'output Ricaricamento rapido.
  • Aprire la finestra Output e in Show output from selezionare Ricaricamento rapido per esaminare i messaggi di diagnostica.
  • Se una riga viene visualizzata in sola lettura durante il debug, potrebbe trattarsi di un'istruzione attiva nello stack di chiamate oppure la modifica potrebbe richiedere un riavvio.

Per un elenco della diagnostica comune, vedere i messaggi di errore di Ricaricamento rapido e Edit and Continue. Se il problema persiste e l'output non mostra una causa chiara, usare Report a Problem per inviare commenti e suggerimenti al team Visual Studio.

Se stai utilizzando la compressione delle risposte in .NET Core, consulta le informazioni su response compression.