Unterstützung von .NET Hot Reload für ASP.NET Core
.NET Hot Reload wendet Codeänderungen, einschließlich Änderungen an Stylesheets, auf eine ausgeführte App an, ohne die App neu zu starten oder den App-Zustand zu verlieren. Hot Reload wird für alle ASP.NET Core 6.0-Projekte oder höher unterstützt.
Im Allgemeinen wird der aktualisierte Code erneut ausgeführt, um bei den folgenden Bedingungen wirksam zu werden:
- Bestimmte Startlogik wird nur einmal ausgeführt:
- Middleware, es sei denn, die Codeaktualisierung gilt für einen Delegaten für Inlinemiddleware.
- Konfigurierte Dienste.
- Routenerstellung und -konfiguration, es sei denn, die Codeaktualisierung bezieht sich auf einen Delegaten für einen Routenhandler (z. B.
OnInitialized
).
- In Blazor-Apps löst das Framework automatisch das Rendern einer Razor-Komponente aus.
- In MVC- und Razor Pages-Apps löst Hot Reload automatisch eine Browseraktualisierung aus.
- Das Entfernen eines Attributs eines RazorRazor führt nicht zum erneuten Rendern der Komponente. Die App muss neu gestartet werden.
Weitere Informationen zu nicht unterstützten Szenarios finden Sie unter Unterstützte Codeänderungen (C# und Visual Basic).
Blazor WebAssembly
Blazor WebAssembly Hot Reload unterstützt die folgenden Codeänderungen:
- Neue Typen.
- Geschachtelte Klassen.
- Die meisten Änderungen an Methodenkörpern, z. B. Hinzufügen, Entfernen und Bearbeiten von Variablen, Ausdrücken und Anweisungen.
- Änderungen am Körper von Lambdaausdrücken und lokalen Funktionen.
- Vorhandenen Typen wurden statische und Instanzmethoden hinzugefügt.
- Hinzufügen statischer Felder, Ereignisse und Eigenschaften und Instanzfelder, -ereignisse und- eigenschaften zu vorhandenen Typen
- Vorhandenen Methoden wurden statische Lambdafunktionen hinzugefügt.
- Vorhandenen Methoden, die bereits zuvor
this
erfasst haben, wurden Lambdafunktionen hinzugefügt, diethis
erfassen.
Beachten Sie, dass beim Entfernen eines Attributs, das zuvor den Wert eines Komponentenparameters festgelegt hat, die Komponente verworfen und neu initialisiert wird, um den entfernten Parameter erneut auf seinen Standardwert festzulegen.
Die folgenden Codeänderungen werden für Blazor WebAssembly-Apps nicht unterstützt:
- Hinzufügen eines neuen
await
-Operators oderyield
-Schlüsselwortausdrucks. - Ändern der Namen von Methodenparametern.
Blazor WebAssembly Hot Reload unterstützt die folgenden Codeänderungen:
- Neue Typen.
- Geschachtelte Klassen.
- Die meisten Änderungen an Methodenkörpern, z. B. Hinzufügen, Entfernen und Bearbeiten von Variablen, Ausdrücken und Anweisungen.
- Änderungen am Körper von Lambdaausdrücken und lokalen Funktionen.
- Vorhandenen Typen wurden statische und Instanzmethoden hinzugefügt.
- Hinzufügen statischer Felder zu vorhandenen Typen
- Vorhandenen Methoden wurden statische Lambdafunktionen hinzugefügt.
- Vorhandenen Methoden, die bereits zuvor
this
erfasst haben, wurden Lambdafunktionen hinzugefügt, diethis
erfassen.
Beachten Sie, dass beim Entfernen eines Attributs, das zuvor den Wert eines Komponentenparameters festgelegt hat, die Komponente verworfen und neu initialisiert wird, um den entfernten Parameter erneut auf seinen Standardwert festzulegen.
Die folgenden Codeänderungen werden für Blazor WebAssembly-Apps nicht unterstützt:
- Hinzufügen eines neuen
await
-Operators oderyield
-Schlüsselwortausdrucks. - Ändern der Namen von Methodenparametern.
- Hinzufügen von Instanzfeldern- (nicht-
static
), -ereignissen oder -eigenschaften
Blazor WebAssembly Hot Reload unterstützt die folgenden Codeänderungen:
- Die meisten Änderungen an Methodenkörpern, z. B. Hinzufügen, Entfernen und Bearbeiten von Variablen, Ausdrücken und Anweisungen.
- Änderungen am Körper von Lambdaausdrücken und lokalen Funktionen.
Die folgenden Codeänderungen werden für Blazor WebAssembly-Apps nicht unterstützt:
- Hinzufügen neuer Lambdaausdrücke oder lokaler Funktionen.
- Hinzufügen eines neuen
await
-Operators oderyield
-Schlüsselwortausdrucks. - Ändern der Namen von Methodenparametern.
- Änderungen außerhalb von Methodentexten.
- Hinzufügen von Instanzfeldern- (nicht-
static
), -ereignissen oder -eigenschaften
.NET CLI
Hot Reload wird mit dem Befehl dotnet watch
aktiviert:
dotnet watch
Um die Neuerstellung und den Neustart der App zu erzwingen, verwenden Sie die Tastenkombination STRG+R in der Befehlsshell.
Wenn eine nicht unterstützte Codebearbeitung vorgenommen wird (auch als Rude Editbezeichnet), werden Sie von dotnet watch
gefragt, ob Sie die App neu starten möchten:
- Ja: Die App wird neu gestartet.
- Nein: Die App wird nicht neu gestartet, sondern ohne Anwendung der Änderungen weiter ausgeführt.
- Immer: Die App wird bei Bedarf neu gestartet, wenn Rude Edits vorgenommen werden.
- Nie: Die App wird nicht neu gestartet, und zukünftige werden keine Eingabeaufforderungen mehr angezeigt.
Übergeben Sie die Option --no-hot-reload
an den Befehl dotnet watch
, um die Unterstützung für Hot Reload zu deaktivieren:
dotnet watch --no-hot-reload
Hot Reload deaktivieren
Die folgende Einstellung in Properties/launchSettings.json
deaktiviert Hot Reload:
"hotReloadEnabled" : false
Zusätzliche Ressourcen
Weitere Informationen finden Sie in den folgenden Ressourcen der Visual Studio-Dokumentation:
- YouTube-Video .NET 6 Hot Reload in Visual Studio 2022, VS Code und NOTEPAD?!?
- Einführung in .NET Hot Reload zum Bearbeiten von Code zur Laufzeit
- Schreiben und Debuggen von Code während der Ausführung mit Hot Reload in Visual Studio
- Updates für Blazor- und Razor-Editoren sowie Hot Reload für ASP.NET
- Testausführung mit Hot Reload