Sdílet prostřednictvím


Podporované změny kódu (C# a Visual Basic)

Mechanismus opětovného načítání za běhu, dříve označovaný jako Edit and Continue, zpracovává většinu typů změn kódu v tělech metod. Většina změn mimo těla metody a několik změn v těle metody se ale během ladění nedá použít. Pokud chcete tyto nepodporované změny použít, musíte zastavit ladění a restartovat s novou verzí kódu.

Mechanismus Edit and Continue zpracovává většinu typů změn kódu v tělech metody. Většina změn mimo těla metody a několik změn v těle metody se ale během ladění nedá použít. Pokud chcete tyto nepodporované změny použít, musíte zastavit ladění a restartovat s novou verzí kódu.

Podporované změny kódu

Následující tabulka ukazuje změny, které mohou být provedeny v kódu jazyka C# a Visual Basic během ladicí relace bez restartování relace.

Element nebo funkce jazyka Podporovaná operace úprav Omezení
Typy Přidání metod, polí, konstruktorů a dalších Ano
Iterátory Přidání nebo úprava Ne
výrazy async/await Přidání nebo úprava Ano
Dynamické objekty Přidání nebo úprava Ne
výrazy lambda Přidání nebo úprava Ano
Výrazy LINQ Přidání nebo úprava stejné jako výrazy lambda
Generika Přidání nebo úprava Ano
Element nebo funkce jazyka Podporovaná operace úprav Omezení
Typy Přidání metod, polí, konstruktorů a dalších Ano
Iterátory Přidání nebo úprava Ne
výrazy async/await Přidání nebo úprava Ano
Dynamické objekty Přidání nebo úprava Ne
výrazy lambda Přidání nebo úprava Ano
Výrazy LINQ Přidání nebo úprava stejné jako výrazy lambda

Poznámka

Novější jazykové funkce, jako je interpolace řetězců a podmíněné operátory s hodnotou null, jsou obecně podporovány funkcí Upravit a Pokračovat. Nejaktuálnější informace najdete na stránce Podporované úpravy Enc.

Vylepšení pro .NET 6 a novější verze

Vylepšení v .NET 6 nebo novějších verzích a v sadě Visual Studio 2022 a novějších verzích zahrnují podporu více typů úprav, které překračují rámec toho, co bylo původně možné ve starších verzích sady Visual Studio. Tato vylepšení jsou k dispozici pro funkce Hot Reload i Edit and Continue.

Rozhraní .NET 6+ funkce Hot Reload využívá mechanismus Upravit a pokračovat a Roslyn. Podporované úpravy uvádí typy úprav, které Roslyn aktuálně podporuje, a potenciální budoucí vylepšení.

Nepodporované změny kódu

Následující změny nelze aplikovat na kód v jazyce C# a Visual Basic během relace ladění.

  • Změny aktuálního příkazu nebo jakéhokoli jiného aktivního příkazu.

    Aktivní příkaz je libovolný příkaz ve funkci v zásobníku volání, který byl volán, aby se dostal do aktuálního příkazu.

    Aktuální příkaz se zobrazí na žlutém pozadí ve zdrojovém okně. Další aktivní příkazy se zobrazují na stínovaném pozadí a jsou jen pro čtení. Tyto výchozí barvy lze změnit v dialogovém okně Možnosti.

  • Všechny nepodporované změny kódu podle elementu jazyka, jak je uvedeno v následující tabulce.

    Element nebo funkce jazyka Nepodporovaná operace úprav
    Všechny prvky kódu Přejmenování
    Jmenné prostory Přidat
    Jmenné prostory, typy, členy Vymazat
    Rozhraní Upravit
    Typy Přidat abstraktního nebo virtuálního člena, přidat přepsání (viz podrobnosti )
    Typy Přidání destruktoru
    Členové - Úprava členu odkazujícího na vložený interop typ
    - Upravit statického člena poté, co byl již přístupný, tím, že se vykoná kód
    Členové (Visual Basic) - Úprava člena pomocí příkazu On Error nebo Resume
    - Úprava člena obsahujícího klauzuli dotazu LinQ Agregovat, Seskupovat podle, Simple Join nebo Group Join
    Metody - Úprava podpisů
    - Změňte abstraktní metodu na neabstraktní přidáním těla metody
    - Odstranění těla metody
    Atributy Přidání nebo úprava
    Události nebo vlastnosti Úprava parametru typu, základního typu, typu delegáta nebo návratového typu
    Operátory nebo indexery Úprava parametru typu, základního typu, typu delegáta nebo návratového typu
    catch blocks Upravit, když obsahuje aktivní příkaz
    bloky try-catch-finally Upravit, když obsahuje aktivní příkaz
    using – příkazy Přidat
    asynchronní metody /lambdas Úprava asynchronní metody nebo lambda v projektu, který cílí na rozhraní .NET Framework 4 a nižší (viz podrobnosti )
    Iterátory Úprava iterátoru v projektu, který cílí na rozhraní .NET Framework 4 a starší (viz podrobnosti )
    Element nebo funkce jazyka Nepodporovaná operace úprav
    Všechny prvky kódu Přejmenování
    Jmenné prostory Přidat
    Obory názvů, typy, členy Vymazat
    Generika Přidání nebo úprava
    Rozhraní Upravit
    Typy Přidejte abstraktního nebo virtuálního člena, přidejte přepsání (viz podrobnosti )
    Typy Přidání destruktoru
    Členové - Úprava člena odkazujícího na vložený interop typ
    - Upravit statického člena poté, co již byl přístupný, spuštěním kódu.
    Členové (Visual Basic) - Úprava člena pomocí příkazu On Error nebo Resume
    - Úprava člena obsahujícího klauzuli dotazu LinQ Agregovat, Seskupovat podle, Simple Join nebo Group Join
    Metody - Úprava podpisů
    - Změňte abstraktní metodu na neabstraktní přidáním těla metody
    - Smazat tělo metody
    Atributy Přidání nebo úprava
    Události nebo vlastnosti Úprava parametru typu, základního typu, typu delegáta nebo návratového typu
    Operátory nebo indexery Úprava parametru typu, základního typu, typu delegáta nebo návratového typu
    zachytávací bloky Upravit, když obsahuje aktivní příkaz
    bloky konstrukcí try-catch-finally Upravit, když obsahuje aktivní příkaz
    using – příkazy Přidat
    asynchronní metody/lambdas Úprava asynchronní metody nebo lambda v projektu, který cílí na rozhraní .NET Framework 4 a nižší (viz podrobnosti )
    Iterátory Úprava iterátoru v projektu, který cílí na rozhraní .NET Framework 4 a starší (viz podrobnosti )

Nebezpečný kód

Změny nebezpečného kódu mají stejná omezení jako změny bezpečného kódu s jedním omezením navíc: Edit and Continue nepodporuje změny nebezpečného kódu, který se ukončí v metodě, která obsahuje operátor stackalloc.

Podpora aplikací

Mezi podporované aplikace patří:

  • Aplikace pro UPW ve Windows 10 nebo Windows 11
  • Aplikace x86 a x64, které cílí na desktopovou nebo novější verzi rozhraní .NET Framework 4.6 (rozhraní .NET Framework je pouze desktopová verze)

Pro .NET 6 a novější se úpravy podporují pro následující typy souborů:

  • .cshtml
  • .razor

Nepodporované aplikace, platformy a operace

Mezi nepodporované aplikace nebo platformy patří:

  • F#
  • .NET Native
  • Silverlight 5
  • Windows 8.1
  • Xamarin.Forms (iOS a Android)

U ASP.NET a ASP.NET Core se úpravy nepodporují u následujících typů souborů:

  • .aspx
  • .ascx
  • .aspx
  • .ascx
  • .cshtml
  • .razor

Nepodporované scénáře

Funkce Upravit a pokračovat není dostupná v následujících scénářích ladění:

  • Ladění ve smíšeném režimu (nativní nebo spravované)

  • Ladění v Arm64 bez cílení na .NET 7 nebo novější

  • Ladění pomocí sady proměnných prostředí COR_ENABLE_PROFILING.

  • Ladění aplikace pomocí připojení k procesu (Ladění > Připojit k procesu) namísto spuštění aplikace výběrem Spustit z nabídky Ladění. Pokud chcete při připojování k procesu použít funkci Upravit a pokračovat, musí být před spuštěním procesu nastavena proměnná prostředí COMPLUS_ForceENC (set COMPLUS_ForceENC=1).

  • Ladění s nedeterministickými (například časovými) verzemi sestavení. Pokud chcete použít funkci Edit and Continue, zvažte nastavení verze pouze v buildu Release (nebo CI) a ponechte verzi v buildu Debug konstantní.

  • Ladění optimalizovaného kódu

  • Ladění SQL

  • Ladění souboru s výpisem paměti

  • Ladění vestavěné aplikace v runtime prostředí

  • Ladění starší verze kódu poté, co se nepodařilo sestavit novou verzi kvůli chybám při sestavování.