Schreiben und Debuggen von ausgeführtem Code mit Hot Reload in Visual Studio (C#, Visual Basic, C++)
Ab Visual Studio 2022 funktioniert die Hot Reload-Oberfläche in Visual Studio sowohl für verwaltete .NET- als auch für systemeigene C++-Apps. Unabhängig von der Art der App, an der Sie arbeiten, ist es das Ziel von "Hot Reload", die Anzahl der App-Neustarts zwischen Bearbeitungen so weit wie möglich zu reduzieren, was Ihnen zu mehr Produktivität verhilft, indem Sie die Zeit verringern, die Sie mit dem Wiederaufbau, dem Neustart und der erneuten Navigation zur vorherigen Position in der App verbringen.
Wir verbessern die Produktivität, indem wir es Ihnen ermöglichen, die Codedateien Ihrer Anwendung zu bearbeiten und die Codeänderungen sofort auf die laufende Anwendung anzuwenden, auch bekannt als Hot Reload. Sobald Ihre Änderungen angewendet wurden, führen Sie den Code erneut aus, indem Sie eine Aktion in der App selbst (oder durch eine Art Zeitgeber usw.) ausführen und die Änderungen sofort anzeigen; Es ist keine Unterbrechung der App durch Haltepunkte erforderlich!
Aktualisieren des ausgeführten Codes mit Hot Reload
Öffnen Sie ein Projekt basierend auf einem unterstützten Anwendungstyp. Weitere Informationen finden Sie unter .NET- und C++- unterstützten Anwendungen.
Starten Sie die App mit dem Debugger, der entweder mit F5 verbunden ist, oder (falls unterstützt) STRG+F5.
Öffnen Sie eine Codedatei, und ändern Sie den Code.
Wenden Sie die Codeänderungen mithilfe der Schaltfläche Hot Reload an, oder drücken Sie ALT+F10.
Um die Änderungen auf der Benutzeroberfläche anzuzeigen, muss der Code erneut ausgeführt werden. CodeBehind für eine Schaltfläche muss beispielsweise erneut ausgeführt werden, oder Code, der in einem Intervall über einen Timer ausgelöst wird. Als weiteres Beispiel unterstützt ASP.NET Core die automatische Browseraktualisierung aufgrund der MetadataUpdateHandler- Funktionalität.
Unterstützung für .NET-Anwendungen
- Wenn Sie Visual Studio 2022 verwenden und Ihre App mit dem Debuggerstarten, funktioniert die grundlegende Hot Reload-Benutzeroberfläche mit den meisten Typen von .NET-Apps und Frameworkversionen. Diese Unterstützung umfasst .NET Framework, .NET Core und .NET 5+ (sowohl für C# als auch für Visual Basic). Die Erwartung in diesem Szenario besteht darin, dass bei Verwendung des Debuggers davon ausgegangen wird, dass Hot Reload für Sie verfügbar ist, und versuchen Sie es!
- Wenn Sie Visual Studio 2022 verwenden, aber nicht den Debugger verwenden (z. B. CTRL-F5 zum Starten der App verwenden), ist Hot Reload verfügbar, wenn sie auf die meisten Typen von .NET 6-Apps ausgerichtet ist. In diesem Szenario unterstützen Apps, die nicht auf .NET 6+ ausgerichtet sind (d. h., sie zielen auf .NET 5 oder darunter) nicht das Szenario "Kein Debugger" und müssen den Debugger verwenden, um die Unterstützung für "Hot Reload" zu erhalten.
- Bei Verwendung von Visual Studio 2022 mit einer .NET 6+-App werden die meisten Szenarienunterstützt. Diese Unterstützung ist nicht auf das zuvor erwähnte neue Feature "Kein Debugger" beschränkt. Es enthält auch andere neue Funktionen, wie zum Beispiel die Unterstützung für das Hot Reloading von Blazor-Projekten und, allgemeiner, das Bearbeiten von Razor-Dateien in allen ASP.NET Core-Anwendungen sowie das CSS Hot Reload. Die Verwendung von Visual Studio 2022 und Apps, die auf .NET 6 ausgelegt sind, bietet Ihnen das leistungsstärkste Hot Reload-Erlebnis.
In der folgenden Tabelle ist die mindeste .NET-Version aufgeführt, die erforderlich ist, um .NET Hot Reload mit dem angefügten Debugger (F5) und ohne angefügten Debugger (STRG+F5) basierend auf dem Projekttyp zu unterstützen. Visual Studio 2022, Version 17.8 oder höher, ist erforderlich.
Anwendungstyp | F5 | Strg+F5 | MetadataUpdateHandler -Unterstützung |
---|---|---|---|
Konsole | ✅ | .NET 6 | .NET 6 |
Unter Linux/macOS ausgeführt (Docker und WSL) |
.NET 8 | .NET 6 | .NET 8 |
Ausführung auf 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 | -- | -- |
Die Bearbeitungstypen, die Sie mit Hot Reload vornehmen können, werden von der Laufzeit- und Compilerversion bestimmt, nicht von der Methode, die Sie zum Starten der Anwendung verwendet haben (F5 oder STRG+F5).
In den folgenden Abschnitten geben wir weitere Details an.
Unterstützung für C++-Anwendungen
Wenn Sie Visual Studio 2022 verwenden und Ihre App mit dem Debugger starten, können Sie eine native C++-Anwendung mit der Schaltfläche Hot Reload während der Ausführung unter dem Debugger (F5) hot reloaden. Hot Reload wird auch für Apps unterstützt, die mit CMake- und OpenFolder-Projekten erstellt wurden.
Damit Ihr Projekt Hot Reload unterstützt, benötigen Sie die folgenden Optionen:
- Projekt > Eigenschaften > C/C++ > Allgemeines >Debug-Informationsformat muss auf „Programmdatenbank für Bearbeiten und Fortsetzen“ eingestellt sein
/ZI
- Projekt > Eigenschaften > Linker > Allgemein >Inkrementelle Verknüpfung aktivieren muss auf "Ja
/INCREMENTAL
" festgelegt sein.
Unterstützte Bearbeitungen finden Sie unter C++ unterstützte Codeänderungen.
Visual Studio 2022 mit einer .NET-App bei Verwendung des Debuggers
Wenn Sie Visual Studio 2022 verwenden und die App mit dem Debugger starten, funktioniert Hot Reload mit den meisten App-Frameworks.
Überall, wo .NET vorhanden ist und Sie den verwalteten Debugger von Visual Studio verwenden, sollten Sie grundlegende Unterstützung für "Hot Reload" erhalten. Dies bedeutet, dass sogar Projekte wie Azure Functions in diesem Szenario hervorragend funktionieren.
Anmerkung
Standardmäßig verwenden einige Projekte das Debuggen im gemischten Modus, was hot Reload nicht unterstützt. Sie können diese Einstellung in den Projekteinstellungen ändern, indem Sie Projekt > Eigenschaften > Debuggen > Debug-Startprofilbenutzeroberfläche öffnen > Natives Code-Debugging aktivieren auf falsch setzen.
Visual Studio 2022 mit einer .NET-App, aber nicht mit dem Debugger
Hot Reload ist ohne einen Debugger verfügbar, wenn die meisten Typen von .NET 6+-Anwendungen gezielt angesprochen werden.
Dieses Feature ist exklusiv für .NET 6+. Diese Apps, die nicht auf .NET 6+ abzielen (d. h., sie zielen auf .NET 5 oder darunter) unterstützen nicht das Szenario "Kein Debugger" und müssen den Debugger verwenden, um Zugriff auf die Hot Reload-Funktionalität zu erhalten.
Außerdem unterstützen nicht alle Projekttypen derzeit das Szenario "Kein Debugger", siehe Support für .NET-Anwendungen.
Visual Studio 2022 mit einer .NET 6+-App
Wenn Sie sowohl Visual Studio 2022 als auch Apps verwenden, die auf .NET 6+ ausgerichtet sind, erhalten Sie die Vorteile der poliertsten und fähigsten Hot Reload-Erfahrung.
Unterstützt in diesem Szenario:
- Blazor-Apps (Server und WebAssembly)
- Bearbeiten von Razor-Dateien sowohl in Blazor als auch in regelmäßigen ASP.NET Core-Websites
- CSS Hot Reload
- XAML Hot Reload
- Unterstützung für "Hot Reload", wenn Apps ohne Debugger ausgeführt werden (wie weiter oben beschrieben)
Wenn Sie auf .NET 6+ abzielen, erhalten Sie weiterhin Verbesserungen in den kommenden Visual Studio 2022-Updates und den .NET-Funktionsbändern und Haupt-Releases.
Unterstützte ASP.NET Kernszenarien
Die grundlegende Erfahrung des "Hot Reload" wird für viele ASP.NET-Szenarien unterstützt. Das am häufigsten verfügbare Feature ist die Möglichkeit, CodeBehind- und andere .NET-Klassendateien für die meisten Arten von Webanwendungen zu ändern. Dieses Feature funktioniert bei Verwendung des Visual Studio-Debuggers und ist überall vorhanden, wo hot Reload zuvor verfügbar war. Spezifischere Anleitungen finden Sie unter .NET Hot Reload-Unterstützung für ASP.NET Core.
Für ASP.NET Core-Entwickler, die auf .NET 6+ abzielen, gibt es zusätzliche Funktionen, die für niedrigere Versionen von .NET nicht verfügbar sind. Zu diesen Funktionen gehören:
- CSHTML: Bearbeiten einer Razor CSHTML-Datei unterstützt viele Arten von Bearbeitungen.
- Browseraktualisierung: Das Bearbeiten einer Razor-Datei aktualisiert beim Debuggen automatisch die Änderungen in Ihrem Webbrowser. Dieses Feature war zuvor nur beim Starten der App ohne Debugger verfügbar.
- CSS Hot Reload: Sie können CSS-Dateien ändern, während die App ausgeführt wird, und Änderungen werden während der Eingabe sofort auf die ausgeführte App angewendet.
- Kein Debugger: Sie erhalten Unterstützung für Hot Reload, wenn Sie Visual Studio verwenden, um Ihre Web-App ohne den Debugger zu starten (CTRL-F5).
Unterstützte .NET-Änderungen
Das .NET Hot Reload-Erlebnis wird vom Debugger und C#-Compiler (Roslyn) ermöglicht. Roslyn-unterstützte Bearbeitungen und unterstützte Codeänderungen (C# und VB) listen die derzeit unterstützten Bearbeitungstypen und potenzielle zukünftige Verbesserungen auf.
Nicht unterstützte .NET-Projekte
Hot Reload ist in einigen Projektkonfigurationen nicht verfügbar:
- Wenn Sie Visual Studio ohne den Debugger verwenden, funktioniert Hot Reload nur für .NET-Apps für .NET 6+.
- Wenn Sie den Visual Studio-Debugger zum Ausführen Ihrer App verwenden, aber
Enable Hot Reload and Edit and Continue when debugging
in den Einstellungen deaktiviert haben, wird "Hot Reload" nicht unterstützt. - Release- oder benutzerdefinierte Buildkonfigurationen werden nicht unterstützt. Ihr Projekt muss die
Debug
Buildkonfiguration verwenden. - Wenn Sie auf ein F#- oder .NET Native-Projekt abzielen.
- Einige Start- oder Kompilierungsoptimierungen werden in .NET Hot Reload nicht unterstützt. Wenn das Debugprofil Ihres Projekts z. B. wie folgt konfiguriert ist, wird .NET Hot Reload nicht unterstützt:
- Kürzen ist für Ihr Projekt aktiviert. Es wird z. B. nicht unterstützt, wenn
PublishTrimmed
in der Projektdatei für das Debugprofil auf "True" festgelegt ist. - ReadyToRun ist für Ihr Projekt aktiviert. Es wird z. B. nicht unterstützt, wenn
PublishReadyToRun
in der Projektdatei für das Debugprofil auf "True" festgelegt ist.
- Kürzen ist für Ihr Projekt aktiviert. Es wird z. B. nicht unterstützt, wenn
Weitere Informationen finden Sie in der Rubrik nicht unterstützte Szenarien.
Hot Reload wird für F# nicht unterstützt.
Hot Reload oder "Edit and Continue" wird nicht unterstützt, wenn Sie F#-Code debuggen. Bearbeitungen an F#-Code sind während einer Debugsitzung möglich, sollten jedoch vermieden werden. Codeänderungen werden während der Debugsitzung nicht angewendet. Daher führen alle Änderungen, die beim Debuggen an F#-Code vorgenommen wurden, zu Quellcode, der nicht mit dem zu debuggenden Code übereinstimmt.
Hot Reload konfigurieren
Informationen zum Aktivieren, Deaktivieren oder Konfigurieren von Hot Reload finden Sie unter Konfigurieren von Bearbeiten und Fortfahren.
Warnmeldung
Wenn das folgende Dialogfeld angezeigt wird, kann Hot Reload die aktuellen Bearbeitungen nicht anwenden, ohne neu zu starten. Sie können entweder die App neu erstellen und Änderungen anwenden (neu starten) oder die Bearbeitung fortsetzen. Wenn Sie neu erstellen, geht der gesamte Anwendungsstatus verloren. Wenn Sie die Bearbeitung fortsetzen, ist es möglich, dass zusätzliche Änderungen oder Korrekturen dazu führen können, dass "Hot Reload" erneut funktioniert.
Wenn Sie im Dialogfeld die Option Immer neu erstellen, wenn Änderungen nicht angewendet werden können auswählen, wird das Dialogfeld in der aktuellen Visual Studio-Sitzung nicht erneut angezeigt. Stattdessen wird Visual Studio automatisch neu erstellt und neu geladen.
Fehlerbehebung
Es wird dringend empfohlen, nach dem Fenster Hot Reload-Ausgabe nach detaillierten Diagnoseinformationen zur Hot Reload-Sitzung zu suchen.
Wenn Sie die Antwortkomprimierung unter .NET Core verwenden, lesen Sie die Informationen zur Antwortkomprimierung.