Modifiche al codice supportate (C# e Visual Basic)
Il meccanismo di Ricaricamento rapido, precedentemente denominato Modifica e continuazione, 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, interrompere il debug e riavviarlo utilizzando una versione aggiornata 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, interrompere il debug e riavviarlo utilizzando una versione aggiornata del 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 | Limiti |
---|---|---|
Tipi | Aggiungere metodi, campi, costruttori e altro ancora | Sì |
Iteratori | Aggiungi o modifica | No |
espressioni async/await | Aggiungi o modifica | Sì |
Oggetti dinamici | Aggiungi o modifica | No |
espressioni lambda | Aggiungi o modifica | Sì |
Espressioni LINQ | Aggiungi o modifica | Uguale alle espressioni lambda |
Generics | Aggiungi o modifica | Sì |
Elemento o funzionalità del linguaggio | Operazione di modifica supportata | Limiti |
---|---|---|
Tipi | Aggiungere metodi, campi, costruttori e altro ancora | Sì |
Iteratori | Aggiungi o modifica | No |
espressioni async/await | Aggiungi o modifica | Sì |
Oggetti dinamici | Aggiungi o modifica | No |
espressioni lambda | Aggiungi o modifica | Sì |
Espressioni LINQ | Aggiungi o modifica | 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.
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 Ricaricamento rapido che per le esperienze di modifica e continuazione.
L'esperienza di Ricaricamento rapido .NET 6+ è basata sul meccanismo Modifica e continuazione e Roslyn. Le modifiche supportate elencano i tipi di modifiche attualmente supportati da Roslyn e i potenziali miglioramenti futuri.
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 chiamata chiamata per accedere 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. È possibile cambiare i colori predefiniti nella finestra di dialogo Opzioni.
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 Namespaces (Spazi dei nomi) Aggiungi Spazi dei nomi, tipi, membri Elimina Interfacce Modifica Tipi Aggiungere un membro astratto o virtuale, aggiungere override (vedere i dettagli) Tipi Aggiungi 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
- Corpo del metodo DeleteAttributi Aggiungi o modifica 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 utilizzo di istruzioni Aggiungi metodi asincroni/espressioni lambda Modificare un metodo asincrono/lambda in un progetto destinato a .NET Framework 4 e versioni precedenti (vedere i dettagli) Iteratori Modificare un iteratore in un progetto destinato a .NET Framework 4 e versioni precedenti (vedere i dettagli) Elemento o funzionalità del linguaggio Operazione di modifica non supportata Tutti gli elementi di codice Ridenominazione Namespaces (Spazi dei nomi) Aggiungi Spazi dei nomi, tipi, membri Elimina Generics Aggiungi o modifica Interfacce Modifica Tipi Aggiungere un membro astratto o virtuale, aggiungere override (vedere i dettagli) Tipi Aggiungi 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
- Corpo del metodo DeleteAttributi Aggiungi o modifica 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 utilizzo di istruzioni Aggiungi metodi asincroni/espressioni lambda Modificare un metodo asincrono/lambda in un progetto destinato a .NET Framework 4 e versioni precedenti (vedere i dettagli) Iteratori Modificare un iteratore in un progetto destinato a .NET Framework 4 e versioni precedenti (vedere i dettagli)
Le modifiche apportate al codice non sicuro presentano le stesse limitazioni delle modifiche apportate al codice sicuro, con una restrizione aggiuntiva: Modifica e continuazione non supporta le modifiche apportate al codice non sicuro che esce da un metodo che contiene l'operatore stackalloc
.
Le applicazioni supportate includono:
- App UWP in 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
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
Modifica e continuazione non è disponibile negli scenari di debug seguenti:
Debug in modalità mista (nativo/gestito).
Debug in Arm64 senza usare .NET 7 o versione successiva.
Debug con il set di variabili di ambiente COR_ENABLE_PROFILING .
Debug di un'applicazione usando attach to process (Debug > Attach to Process) invece di eseguire l'applicazione scegliendo Avvia dal menu Debug . Se si desidera usare Modifica e continuazione durante il collegamento 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 dump.
Debug di un'applicazione di runtime incorporata.
Debug di una versione precedente del codice dopo l'esito negativo della compilazione di una nuova versione a causa di errori di compilazione.