Skriva och felsöka körande kod med Hot Reload i Visual Studio (C#, Visual Basic, C++)
Från och med Visual Studio 2022 fungerar funktionen För frekvent omläsning i Visual Studio för både hanterade .NET-appar och interna C++-appar. Oavsett vilken typ av app du arbetar med är avsikten med frekvent omläsning att spara så många appomstarter mellan redigeringar som möjligt, vilket gör dig mer produktiv genom att minska den tid du lägger på att vänta på att appar ska återskapas, startas om, navigera till den tidigare platsen där du var i själva appen, m.fl.
Vi förbättrar produktiviteten genom att göra det möjligt för dig att redigera programmets kodfiler och tillämpa kodändringarna omedelbart på det program som körs, även kallat Hot Reload. När ändringarna har tillämpats kör du koden igen genom att vidta en åtgärd i själva appen (eller genom någon form av timer osv.) och se ändringarna omedelbart. ingen pausning av appen via brytpunkter krävs!
Uppdatera kod som körs med Hot Reload
Öppna ett projekt baserat på en programtyp som stöds. Se .NET och C++ program som stöds.
Starta appen med felsökningsprogrammet kopplat med antingen F5 eller om det stödsCtrl+F5.
Öppna en kodfil och ändra koden.
Tillämpa kodändringarna med knappen Hot Reload eller tryck på ALT+F10.
Om du vill se ändringarna i användargränssnittet måste koden köras igen. Till exempel måste kod bakom för en knapp köras igen, eller kod som utlöses med ett intervall genom en timer. Som ett annat exempel stöder ASP.NET Core automatisk uppdatering av webbläsare på grund av MetadataUpdateHandler- funktioner.
Stöd för .NET-program
- När du använder Visual Studio 2022 och startar appen med felsökningsprogrammetfungerar den grundläggande funktionen för frekvent omläsning med de flesta typer av .NET-appar och ramverksversioner. Det här stödet omfattar .NET Framework, .NET Core och .NET 5+ (för både C# och Visual Basic i tillämpliga fall). Förväntningarna i det här scenariot är att om du använder felsökningsprogrammet antar du att hot reload är tillgängligt för dig och ger det ett försök!
- När du använder Visual Studio 2022 men inte använder felsökningsprogrammet (till exempel genom att använda CTRL-F5 för att starta appen) är Hot Reload tillgängligt när du riktar in dig på de flesta typer av .NET 6-appar. I det här scenariot stöder appar som inte riktar sig mot .NET 6+ (det vill säga .NET 5 eller tidigare) inte scenariot "no debugger" och måste använda debuggern för att få Hot Reload-stöd.
- När du använder Visual Studio 2022 med en .NET 6+-app stöds de flesta scenarier. Det här stödet är inte begränsat till den nya funktionen "inget felsökningsprogram" som nämns ovan. Den innehåller även andra nya funktioner, till exempel stöd för snabb omläsning av Blazor-projekt och, mer allmänt, redigering av Razor-filer i alla ASP.NET Core-appar och CSS Hot Reload. Med Visual Studio 2022 och appar som riktar in sig på .NET 6 tillsammans får du den mest kraftfulla funktionen för snabb omladdning.
I följande tabell visas vilka projekt som stöder .NET Hot Reload med det anslutna felsökningsprogrammet (F5) och utan det anslutna felsökningsprogrammet (Ctrl+F5), enligt den lägsta .NET-version som krävs för stöd i Visual Studio 2022 (17.8).
Programtyp | F5 | Ctrl+F5 |
MetadataUpdateHandler stöd |
---|---|---|---|
Konsol | ✅ | .NET 6 | .NET 6 |
Körs på Linux/macOS (Docker och WSL) |
.NET 8 | .NET 6 | .NET 8 |
Körs på 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 | -- | -- |
De typer av redigeringar som du kan göra med Hot Reload bestäms av körtids- och kompileringsversionen, inte av metoden du använde för att starta programmet (F5 eller Ctrl+F5).
I följande avsnitt ger vi ytterligare information.
Stöd för C++-program
När du använder Visual Studio 2022 och startar din app med felsökaren kan du snabbladda ett inbyggt C++-program när du kör under felsökaren (F5) genom att använda knappen Snabbinläsning. Appar som har skapats med CMake- och OpenFolder-projekt stöder också Hot Reload.
För att projektet ska ha stöd för Hot Reload behöver du ha följande alternativ inställda:
- Projekt > Egenskaper > C/C++ > Allmänt >Felsökningsinformationsformat måste vara inställd på “Programdatabas för redigering och fortsättning
/ZI
” - Project > Properties > Linker > General >Aktivera inkrementell länkning måste vara inställt på "Ja
/INCREMENTAL
"
Information om ändringar som stöds finns i kodändringar som stöds av C++.
Visual Studio 2022 med en .NET-app när du använder felsökningsprogrammet
När du använder Visual Studio 2022 och startar appen med felsökningsprogrammet fungerar Hot Reload med de flesta appramverk.
Var du än har .NET och använder den hanterade felsökaren i Visual Studio bör du få grundläggande stöd för Hot Reload. Det innebär att även projekt som Azure Functions fungerar bra i det här scenariot.
Not
Som standardinställning använder vissa projekt felsökning i blandat läge, vilket inte stöder Hot Reload. Du kan ändra den här inställningen i projektinställningarna genom att sätta Project > Properties > Debug > Open debug launch profiles UI > Enable native code debugging till falskt.
Visual Studio 2022 med en .NET-app, men inte med felsökningsprogrammet
Hot Reload är tillgängligt utan debugger när du riktar dig mot de flesta typer av .NET 6+-appar.
Den här funktionen är exklusiv för .NET 6+. De appar som inte är inriktade på .NET 6+ (dvs. de riktar sig mot .NET 5 eller senare) stöder inte scenariot "inget felsökningsprogram" och måste använda felsökningsprogrammet för att få åtkomst till funktionerna för frekvent omläsning.
Alla projekttyper stöder för närvarande inte heller scenariot "inget felsökningsprogram" i Support för .NET-program.
Visual Studio 2022 med en .NET 6+-app
Om du använder både Visual Studio 2022 och arbetar med appar som är inriktade på .NET 6+, får du fördelarna med den mest polerade och kompatibla hot reload-upplevelsen.
Stöds i det här scenariot:
- Blazor-appar (Server och WebAssembly)
- Redigera Razor-filer på både Blazor- och vanliga ASP.NET Core-webbplatser
- CSS Snabbladdning
- XAML-omladdning utan omstart
- Stöd för Hot Reload vid körning av applikationer utan felsökningsprogrammet (som tidigare beskrivits i detalj)
Om du riktar in dig på .NET 6+ fortsätter du att få förbättringar i kommande Visual Studio 2022-uppdateringar och .NET-funktionsband och större versioner.
ASP.NET grundläggande scenarier som stöds
Den grundläggande funktionen för snabb inläsning stöds för många ASP.NET scenarier. Den mest tillgängliga funktionen är möjligheten att ändra kod bakom och andra .NET-klassfiler för de flesta typer av webbprogram. Den här funktionen fungerar när du använder Visual Studios-felsökaren och är tillgänglig överallt där Hot Reload tidigare fanns. Mer specifik vägledning finns i .NET Hot Reload-stöd för ASP.NET Core.
För ASP.NET Core-utvecklare som riktar in sig på .NET 6+ finns det ytterligare funktioner som inte är tillgängliga för lägre versioner av .NET. Dessa funktioner omfattar:
- CSHTML: Redigering av en Razor CSHTML-fil stöder många typer av redigeringar.
- Webbläsaruppdatering: Redigering av en razor-fil uppdaterar automatiskt ändringarna i webbläsaren vid felsökning. Den här funktionen var tidigare endast tillgänglig när appen startades utan felsökningsprogrammet.
- CSS Hot Reload: Du kan ändra CSS-filer medan appen körs och ändringar tillämpas omedelbart på appen som körs när du skriver.
- Inget felsökningsprogram: Du får stöd för snabb inläsning när du använder Visual Studio för att starta webbappen utan felsökningsprogrammet (CTRL-F5).
.NET-ändringar som stöds
.NET Hot Reload-funktionen drivs av felsökaren och C#-kompilatorn (Roslyn). Roslyn har stöd för redigeringar och kodändringar som stöds (C# och VB) lista vilka typer av redigeringar som för närvarande stöds och potentiella framtida förbättringar.
.NET-projekt som inte stöds
Hot Reload är inte tillgängligt i vissa projektkonfigurationer:
- Om du använder Visual Studio utan felsökningsprogrammet fungerar hot reload endast för .NET-appar som riktar sig till .NET 6+.
- Om du använder Visual Studios felsökare för att köra din app men har inaktiverat
Enable Hot Reload and Edit and Continue when debugging
i inställningarna, stöds inte Hot Reload. - Versionskonfigurationer eller anpassade byggkonfigurationer stöds inte. Projektet måste använda konfigurationen
Debug
build. - Om du riktar in dig på ett F#- eller .NET Native-projekt.
- Vissa start- eller kompileringsoptimeringar stöds inte i .NET Hot Reload. Om projektets felsökningsprofil till exempel har konfigurerats på följande sätt stöds inte .NET Hot Reload:
-
Trimning har aktiverats för ditt projekt. Det stöds till exempel inte om
PublishTrimmed
är inställt på Sant i projektfilen för felsökningsprofilen. -
ReadyToRun- är aktiverat för projektet. Det stöds till exempel inte om
PublishReadyToRun
är inställt på Sant i projektfilen för felsökningsprofilen.
-
Trimning har aktiverats för ditt projekt. Det stöds till exempel inte om
Mer information finns i scenarier som inte stöds.
Konfigurera Hot Reload
Information om hur du aktiverar, inaktiverar eller konfigurerar Hot Reload finns i Configure Edit and Continue.
Varningsmeddelande
Om du ser följande dialogruta kan Hot Reload inte tillämpa de aktuella ändringarna utan att programmet startas om. Du kan välja att antingen återskapa appen och tillämpa ändringar (starta om) eller fortsätta redigera. Om du återskapar går allt programtillstånd förlorat. Om du fortsätter att redigera kan ytterligare ändringar eller korrigeringar göra att Hot Reload fungerar igen.
Om du väljer alternativet Återskapa alltid när ändringar inte kan tillämpas i dialogrutan kommer dialogrutan inte att visas igen i den aktuella Visual Studio-sessionen, och Visual Studio kommer istället att automatiskt återskapa och ladda om utan att visa dialogrutan.
Felsökning
Vi rekommenderar starkt att du kontrollerar Hot Reload Output-fönstret för detaljerad diagnostik-information om hot reload-sessionen.
Om du använder svarskomprimering på .NET Core, se informationen om svarskomprimering.