Condividi tramite


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
Iteratori Aggiungere o modificare No
espressioni async/await Aggiungere o modificare
Oggetti dinamici Aggiungere o modificare No
Espressioni lambda Aggiungere o modificare
Espressioni LINQ Aggiungere o modificare Uguale alle espressioni lambda
Generici Aggiungere o modificare
Elemento o funzionalità del linguaggio Operazione di modifica supportata Limitazioni
Tipi Aggiungere metodi, campi, costruttori e altro ancora
Iteratori Aggiungere o modificare No
espressioni async/await Aggiungere o modificare
Oggetti dinamici Aggiungere o modificare No
Espressioni lambda Aggiungere o modificare
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 codice
    Membri (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 Join
    Metodi - Modificare le firme
    - Rendere un metodo astratto nonabstrato aggiungendo un corpo del metodo
    - Elimina il corpo del metodo
    Attributi 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 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
    - Elimina il corpo del metodo
    Attributi 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.