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.

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 Limiti
Tipi Aggiungere metodi, campi, costruttori e altro ancora
Iteratori Aggiungi o modifica No
espressioni async/await Aggiungi o modifica
Oggetti dinamici Aggiungi o modifica No
espressioni lambda Aggiungi o modifica
Espressioni LINQ Aggiungi o modifica Uguale alle espressioni lambda
Generics Aggiungi o modifica
Elemento o funzionalità del linguaggio Operazione di modifica supportata Limiti
Tipi Aggiungere metodi, campi, costruttori e altro ancora
Iteratori Aggiungi o modifica No
espressioni async/await Aggiungi o modifica
Oggetti dinamici Aggiungi o modifica No
espressioni lambda Aggiungi o modifica
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.

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

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 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 codice
    Membri (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 Join
    Metodi - Modificare le firme
    - Rendere un metodo astratto nonabstrato aggiungendo un corpo del metodo
    - Corpo del metodo Delete
    Attributi 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 codice
    Membri (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 Join
    Metodi - Modificare le firme
    - Rendere un metodo astratto nonabstrato aggiungendo un corpo del metodo
    - Corpo del metodo Delete
    Attributi 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)

Codice di tipo unsafe

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 .

Supporto delle applicazioni

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

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 (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.