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, die this 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:

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, die this 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:

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 oder yield-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: