Psaní a ladění běžícího kódu pomocí načítání za běhu v sadě Visual Studio (C#, Visual Basic, C++)
Od verze Visual Studio 2022 funguje funkce Hot Reload v sadě Visual Studio pro spravované aplikace .NET i nativní aplikace C++. Bez ohledu na typ aplikace, na které pracujete, je záměrem aktivní aktualizace ušetřit minimální počet restartování aplikace mezi úpravami, což vám umožní zvýšit vaši produktivitu tím, že zkracuje dobu strávenou čekáním na opětovné sestavení, restart aplikace a návrat na předchozí místo v samotné aplikaci atd.
Zvyšujeme produktivitu tím, že vám umožňujeme upravovat kódové soubory vaší aplikace a okamžitě aplikovat tyto změny na běžící aplikaci, což je také známé jako Hot Reload. Po použití změn znovu spusťte kód provedením akce v samotné aplikaci (nebo pomocí nějakého časovače atd.) a okamžitě se podívejte na změny; Není vyžadováno pozastavení aplikace přes zarážky.
Aktualizace spuštěného kódu s dynamickým načítáním
Otevřete projekt založený na podporovaném typu aplikace. Podívejte se na .NET a C++ podporované aplikace.
Spusťte aplikaci s připojeným ladicím programem pomocí F5 nebo , pokud je podporovaná, Ctrl+F5.
Otevřete soubor kódu a změňte kód.
Změny kódu použijte pomocí tlačítka Opětovné načítání za provozu nebo stiskněte ALT+F10.
Pokud chcete zobrazit změny v uživatelském rozhraní, je potřeba kód znovu spustit. Například kód propojený s tlačítkem se musí znovu spustit, nebo kód, který se aktivuje v intervalu prostřednictvím časovače. V dalším příkladu ASP.NET Core podporuje automatické aktualizace prohlížeče kvůli funkci MetadataUpdateHandler.
Podpora aplikací .NET
- Při použití sady Visual Studio 2022 a při spuštění aplikace pomocí ladicího programufunguje základní funkce Hot Reload s většinou typů aplikací .NET a verzemi jejich rozhraní. Tato podpora zahrnuje rozhraní .NET Framework, .NET Core a .NET 5+ (pro jazyk C# i Visual Basic podle potřeby). Očekávání v tomto scénáři spočívá v tom, že pokud používáte ladicí program, předpokládané je, že je pro vás k dispozici funkce Hot Reload, tak to zkuste!
- Pokud používáte Visual Studio 2022, ale nepoužíváte ladicí program (například pokud použijete CTRL-F5 ke spuštění aplikace), je při cílení na většinu typů aplikací .NET 6 k dispozici funkce Hot Reload. V tomto scénáři aplikace, které necílí na .NET 6 nebo novější (tj. cílí na .NET 5 nebo starší), nepodporují scénář bez ladicího programu a ke získání podpory opětovného načítání kódu za běhu musí použít ladicí program.
- Při použití sady Visual Studio 2022 s aplikací .NET 6 nebo novější se většina scénářů podporuje. Tato podpora není omezena pouze na novou funkci „žádný ladicí program“ uvedenou výše. Zahrnuje také další nové funkce, jako je podpora opětovného načítání projektů Blazor za běhu a, obecněji, úpravy souborů Razor v jakýchkoli aplikacích ASP.NET Core a CSS Hot Reload za běhu. Používání sady Visual Studio 2022 společně s aplikacemi, které cílí na .NET 6, poskytuje nejvýkonnější zážitek z opětovného načítání za provozu.
Následující tabulka ukazuje, které projekty podporují .NET Hot Reload s připojeným ladicím programem (F5) a bez připojeného ladicího programu (Ctrl+F5), podle minimální verze .NET vyžadované pro podporu v Visual Studio 2022 (17.8).
Typ aplikace | F5 | Ctrl+F5 | podpora MetadataUpdateHandler |
---|---|---|---|
Konzola | ✅ | .NET 6 | .NET 6 |
Běží na Linuxu/macOS (Docker a WSL) |
.NET 8 | .NET 6 | .NET 8 |
Běh na Arm64 | .NET 7 | .NET 7 | .NET 7 |
WPF | ✅ | .NET 6 | .NET 6 |
WinForms | ✅ | .NET 6 | .NET 6 |
ASP.NET | ✅ | .NET 6 | .NET 6 |
Blazor Server | .NET 6 | .NET 6 | .NET 6 |
Blazor WebAssembly | .NET 6 | .NET 6 | .NET 6 |
MAUI (WinUI/Android/iOS) |
.NET 6 | -- | -- |
Typy úprav, které můžete provést s funkcí Hot Reload, jsou určeny runtimem a verzí kompilátoru, nikoli metodou, kterou jste použili ke spuštění aplikace (F5 nebo Ctrl+F5).
V následujících částech uvádíme další podrobnosti.
Podpora aplikací C++
Při použití sady Visual Studio 2022 a spuštění aplikace pod ladicím programem (F5) můžete za běhu znovu načíst nativní aplikaci C++ pomocí tlačítka Hot Reload. Podpora funkce Hot Reload je k dispozici také pro aplikace vytvořené pomocí projektů CMake a OpenFolder.
Aby váš projekt podporoval opětovné načítání za provozu, potřebujete následující nastavení možností:
- Vlastnosti > projektu > C/C++ > Obecné >Formát informací o ladění musí být nastaven na "Programová databáze pro Edit a pokračování
/ZI
" - Vlastnosti projektu >> Linker > Obecné >Povolit přírůstkové linkování musí být nastaveno na "Ano"
/INCREMENTAL
Podporované úpravy najdete v tématu C++ Podporované změny kódu.
Visual Studio 2022 s aplikací .NET při použití ladicího programu
Při použití sady Visual Studio 2022 a spuštění aplikace pomocí ladicího programu funguje Hot Reload s většinou aplikačních frameworků.
Kdekoli máte .NET a používáte spravovaný ladicí program Visual Studio, měli byste mít základní podporu hot reload. To znamená, že i projekty, jako je Azure Functions, fungují v tomto scénáři skvěle.
Poznámka
Ve výchozím nastavení některé z projektů používají ladění ve smíšeném režimu, které nepodporuje živé načítání. Toto nastavení můžete upravit v nastavení projektu tak, že nastavíte Vlastnosti projektu >> Ladění > Otevřít rozhraní pro spouštěcí profily ladění > Povolit ladění nativního kódu na nepravda.
Visual Studio 2022 s využitím aplikace .NET, ale bez použití ladicího programu
Hot Reload je k dispozici bez ladicího programu při cílení na většinu typů .NET 6+ aplikací.
Tato funkce je exkluzivní pro .NET 6 nebo novější. Tyto aplikace necílí na .NET 6 nebo novější (tj. cílí na .NET 5 nebo nižší), nepodporují scénář bez ladicího programu a musí použít ladicí program pro získání přístupu k funkcím Hot Reload.
Ne všechny typy projektů v současné době podporují scénář "žádný ladicí program", viz podpora pro aplikace .NET.
Visual Studio 2022 s aplikací .NET 6 nebo novější
Pokud používáte Visual Studio 2022 a pracujete s aplikacemi, které cílí na .NET 6 nebo novější, získáte výhody nejvyleštěnějšího a nejpropracovanějšího prostředí Hot Reload.
Podporováno v tomto scénáři:
- Aplikace Blazor (Server a WebAssembly)
- Úpravy souborů Razor v blazoru i na běžných webech ASP.NET Core
- CSS Hot Reload
- Opětovné načítání XAML během provozu
- Podpora hot reload při spouštění aplikací bez ladicího programu (jak bylo podrobněji popsáno výše)
Pokud cílíte na .NET 6 nebo novější, budete dál dostávat vylepšení v nadcházejících aktualizacích sady Visual Studio 2022 a v hlavních verzích.
Podporované ASP.NET základní scénáře
Funkce Hot Reload je podporována pro mnoho ASP.NET scénářů. Nejrozšířenější funkcí je možnost měnit soubory code-behind a jiné soubory tříd .NET pro většinu typů webových aplikací. Tato funkce funguje při používání ladicího programu sady Visual Studio a je k dispozici kdekoli, kde byl dříve dostupný Hot Reload. Konkrétnější pokyny najdete v tématu podpora .NET Hot Reload pro ASP.NET Core.
Pro vývojáře ASP.NET Core, kteří cílí na .NET 6 nebo novější, nejsou pro nižší verze .NET k dispozici další možnosti. Mezi tyto možnosti patří:
- CSHTML: Úpravy souboru Razor CSHTML podporuje mnoho typů úprav.
- Aktualizace prohlížeče: Při ladění se při úpravách souboru razor automaticky aktualizují změny ve webovém prohlížeči. Tato funkce byla dříve dostupná pouze při spuštění aplikace bez ladicího programu.
- Živé načítání CSS: Můžete změnit soubory CSS, když běží aplikace, a změny se okamžitě projeví v běžící aplikaci, jakmile je napíšete.
- Žádný ladicí program: Pokud používáte Visual Studio ke spuštění webové aplikace bez ladicího programu (CTRL-F5), získáte podporu pro opětovné načítání za provozu.
Podporované změny .NET
Zážitek z funkce Hot Reload v prostředí .NET je napájen ladicím programem a kompilátorem C# (Roslyn). Roslyn podporuje úpravy a podporované změny kódu (C# a VB) seznam typů úprav, které jsou aktuálně podporovány a potenciální budoucí vylepšení.
Nepodporované projekty .NET
Opětovné načítání za provozu (Hot Reload) není v některých konfiguracích projektu dostupné:
- Pokud používáte Visual Studio bez ladicího programu, funkce Hot Reload funguje pouze pro aplikace .NET, které cílí na .NET 6 a novější.
- Pokud ke spuštění aplikace používáte ladicí program sady Visual Studio, ale v nastavení jste zakázali
Enable Hot Reload and Edit and Continue when debugging
, pak Hot Reload není podporován. - Konfigurace sestavení pro vydání ani vlastní sestavení nejsou podporovány. Váš projekt musí používat konfiguraci sestavení
Debug
. - Pokud cílíte na projekt F# nebo .NET Native.
- Některé optimalizace při spuštění nebo kompilaci nejsou v .NET Hot Reload podporovány. Pokud je například profil ladění projektu konfigurován následujícím způsobem, není podpora pro .NET Hot Reload:
- Oříznutí je povoleno pro váš projekt. Například není podporováno, pokud je
PublishTrimmed
nastaveno na hodnotu True ve vašem souboru projektu pro ladicí profil. -
je pro váš projekt povolený ReadyToRun. Například není podporováno, pokud je
PublishReadyToRun
nastaveno na hodnotu True ve vašem souboru projektu pro ladicí profil.
- Oříznutí je povoleno pro váš projekt. Například není podporováno, pokud je
Další podrobnosti najdete v tématu Nepodporované scénáře.
Nastavení Hot Reload
Informace o tom, jak povolit, zakázat nebo konfigurovat Hot Reload (opětovné načítání za provozu), najdete v tématu Konfigurace režimu úprav a pokračování.
Zpráva s upozorněním
Pokud se zobrazí následující dialogové okno, „Hot Reload“ nemůže bez restartování použít aktuální úpravy. Můžete zvolit, jestli chcete aplikaci znovu sestavit a použít změny (restartovat), nebo pokračovat v úpravách. Při opětovném sestavení dojde ke ztrátě stavu aplikace. Pokud budete pokračovat v úpravách, je možné, že další změny nebo opravy mohou způsobit, že Hot Reload začne znovu fungovat.
Pokud v dialogovém okně vyberete možnost Vždy znovu sestavit, pokud změny nelze použít, dialogové okno se v aktuální relaci Visual Studio znovu nezobrazí a Visual Studio automaticky provede nové sestavení a načtení místo zobrazení dialogového okna.
Řešení problémů
Důrazně doporučujeme zkontrolovat okno výstupu Hot Reload pro podrobné diagnostické informace týkající se relace Hot Reload.
Pokud používáte kompresi odpovědí v .NET Core, přečtěte si informace o kompresi odpovědí.