Modifiche al codice supportate (C# e Visual Basic)
Il meccanismo di Hot Reload, precedentemente denominato Edit e Continue, gestisce la maggior parte dei tipi di modifiche al codice all'interno dei corpi dei metodi. La maggior parte delle modifiche al corpo del metodo e alcune modifiche all'interno dei corpi dei metodi non possono tuttavia essere applicate durante il debug. Per applicare tali modifiche non supportate, è necessario arrestare il debug e riavviarlo con una nuova versione del codice.
Il meccanismo Edit and Continue gestisce la maggior parte dei tipi di modifiche del codice all'interno dei corpi dei metodi. La maggior parte delle modifiche al corpo del metodo e alcune modifiche all'interno dei corpi dei metodi non possono tuttavia essere applicate durante il debug. Per applicare tali modifiche non supportate, è necessario arrestare il debug e riavviarlo con una nuova versione del codice.
Modifiche supportate al codice
La tabella seguente illustra le modifiche che potrebbero essere apportate al codice C# e Visual Basic durante una sessione di debug senza riavviare la sessione.
Elemento o funzionalità del linguaggio | Operazione di modifica supportata | Limitazioni |
---|---|---|
Tipi | Aggiungere metodi, campi, costruttori e altro ancora | sì |
Iteratori | Aggiungere o modificare | No |
espressioni async/await | Aggiungere o modificare | sì |
Oggetti dinamici | Aggiungere o modificare | No |
Espressioni lambda | Aggiungere o modificare | sì |
Espressioni LINQ | Aggiungere o modificare | Uguale alle espressioni lambda |
Generici | Aggiungere o modificare | sì |
Elemento o funzionalità del linguaggio | Operazione di modifica supportata | Limitazioni |
---|---|---|
Tipi | Aggiungere metodi, campi, costruttori e altro ancora | sì |
Iteratori | Aggiungere o modificare | No |
espressioni async/await | Aggiungere o modificare | sì |
Oggetti dinamici | Aggiungere o modificare | No |
Espressioni lambda | Aggiungere o modificare | sì |
Espressioni LINQ | Aggiungere o modificare | Uguale alle espressioni lambda |
Nota
Le funzionalità del linguaggio più recenti, ad esempio l'interpolazione di stringhe e gli operatori condizionali Null, sono in genere supportate da Edit e Continue. Per le informazioni più aggiornate, vedere la pagina modifiche supportate da Enc.
Miglioramenti di .NET 6+
I miglioramenti apportati a .NET 6+ e Visual Studio 2022 e versioni successive includono il supporto per più tipi di modifiche che vanno oltre quanto originariamente possibile nelle versioni precedenti di Visual Studio. Questi miglioramenti sono disponibili sia per Hot Reload che per le funzionalità di Modifica e Continua.
L'esperienza di ricaricamento rapido di .NET 6+ è basata sul meccanismo di Edit and Continue e Roslyn. modifiche supportate elenca i tipi di modifiche attualmente supportati da Roslyn e potenziali miglioramenti futuri.
Modifiche non supportate al codice
Non è possibile applicare le modifiche seguenti al codice C# e Visual Basic durante una sessione di debug.
Modifiche all'istruzione corrente o a qualsiasi altra istruzione attiva.
Un'istruzione attiva è qualsiasi istruzione in una funzione nello stack di chiamate che è stata invocata per arrivare all'istruzione corrente.
L'istruzione corrente viene visualizzata in uno sfondo giallo nella finestra di origine. Altre istruzioni attive vengono visualizzate in uno sfondo ombreggiato e sono di sola lettura. Questi colori predefiniti possono essere modificati nella finestra di dialogo opzioni di .
Eventuali modifiche non supportate al codice in base all'elemento del linguaggio, come descritto nella tabella seguente.
Elemento o funzionalità del linguaggio Operazione di modifica non supportata Tutti gli elementi di codice Ridenominazione Namespace Aggiungere Namespace, tipi, membri Cancellare Interfacce Modificare Tipi Aggiungere un membro astratto o virtuale, aggiungere un'override (vedere dettagli) Tipi Aggiungere un distruttore Membri - Modificare un membro che fa riferimento a un tipo di interoperabilità incorporato
- Modificare un membro statico dopo che è già stato eseguito l'accesso eseguendo il codiceMembri (Visual Basic) - Modificare un membro utilizzando l'istruzione di controllo On Error o Resume
- Modificare un membro contenente una clausola di LINQ query Aggregate, Group By, Simple Join o Group JoinMetodi - Modificare le firme
- Rendere un metodo astratto nonabstrato aggiungendo un corpo del metodo
- Elimina il corpo del metodoAttributi Aggiungere o modificare Eventi o proprietà Modificare un parametro di tipo, un tipo di base, un tipo delegato o un tipo restituito Operatori o indicizzatori Modificare un parametro di tipo, un tipo di base, un tipo delegato o un tipo restituito blocchi catch Modificare quando contiene un'istruzione attiva blocchi try-catch-finally Modificare quando contiene un'istruzione attiva using istruzioni Aggiungere metodi asincroni o espressioni lambda Modificare un metodo asincrono/lambda in un progetto destinato a .NET Framework 4 e versioni precedenti (vedere dettagli) Iteratori Modificare un iteratore in un progetto destinato a .NET Framework 4 e versioni precedenti (vedere dettagli) Elemento o funzionalità del linguaggio Operazione di modifica non supportata Tutti gli elementi di codice Ridenominazione Namespace Aggiungere Namespace, tipi, membri Cancellare Generics Aggiungere o modificare Interfacce Modificare Tipi Aggiungere un membro astratto o virtuale, aggiungere un'override (vedere i dettagli di ) Tipi Aggiungere un distruttore Membri - Modificare un membro che fa riferimento a un tipo di interoperabilità incorporato
- Modificare un membro statico dopo che è già stato eseguito l'accesso eseguendo il codiceMembri (Visual Basic) - Modificare un membro con l'istruzione On Error o Resume
- Modificare un membro contenente una clausola di query LINQ Aggregate, Group By, Simple Join o Group JoinMetodi - Modificare le firme
- Rendere un metodo astratto nonabstrato aggiungendo un corpo del metodo
- Elimina il corpo del metodoAttributi Aggiungere o modificare Eventi o proprietà Modificare un parametro di tipo, un tipo di base, un tipo delegato o un tipo restituito Operatori o indicizzatori Modificare un parametro di tipo, un tipo di base, un tipo delegato o un tipo restituito blocchi catch Modificare quando contiene un'istruzione attiva blocchi try-catch-finally Modifica quando contiene una dichiarazione attiva istruzioni 'using' Aggiungere metodi asincroni/espressioni lambda Modificare un metodo asincrono/lambda in un progetto destinato a .NET Framework 4 e versioni precedenti (vedere dettagli) Iteratori Modificare un iteratore in un progetto destinato a .NET Framework 4 e versioni precedenti (vedere dettagli)
Codice non sicuro
Le modifiche apportate al codice non sicuro hanno le stesse limitazioni delle modifiche apportate al codice sicuro, con una restrizione aggiuntiva: Modifica e continuazione non supporta le modifiche al codice non sicuro che esce da un metodo che contiene l'operatore stackalloc
.
Supporto delle applicazioni
Le applicazioni supportate includono:
- App UWP nelle versioni Windows 10 o Windows 11
- App x86 e x64 destinate a .NET Framework 4.6 desktop o versioni successive (.NET Framework è solo una versione desktop)
Per .NET 6 e versioni successive, la modifica è supportata per i tipi di file seguenti:
- .cshtml
- .razor
App, piattaforme e operazioni non supportate
Le applicazioni o le piattaforme non supportate includono:
- F#
- .NET Native
- Silverlight 5
- Windows 8.1
- Xamarin.Forms (iOS e Android)
Per ASP.NET e ASP.NET Core, la modifica non è supportata per i tipi di file seguenti:
- .aspx
- .ascx
- .aspx
- .ascx
- .cshtml
- .razor
Scenari non supportati
Modifica e continuazione non è disponibile negli scenari di debug seguenti:
Debug in modalità mista (nativa/gestita).
Eseguire il debug su Arm64 senza eseguire il targeting di .NET 7 o versioni successive.
Debug con il set di variabili di ambiente COR_ENABLE_PROFILING.
Debug di un'applicazione tramite attach to process (Debug > Attach to Process) anziché eseguire l'applicazione scegliendo Avvia dal menu debug. Se si desidera usare Modifica e continuazione durante l'associazione a un processo, è necessario impostare la variabile di ambiente COMPLUS_ForceENC prima di avviare il processo (
set COMPLUS_ForceENC=1
).Debug con versioni di assembly non deterministiche (ad esempio, basate sul tempo). Se si vuole usare Modifica e continuazione, è consigliabile impostare la versione solo nelle build di rilascio (o CI) e mantenere costante la versione nelle compilazioni di debug.
Debug di codice ottimizzato.
Debug SQL.
Debug di un file di dump.
Debug di un'applicazione di runtime incorporata.
Eseguire il debug di una vecchia versione del codice dopo che una nuova versione non è stata compilata con successo a causa di errori di compilazione.
Contenuto correlato
- Modifica e continuazione (Visual C#)
- Procedura: Usare modifica e continuazione (C#)