Unterstützte Codeänderungen (C# und Visual Basic)
Der Hot Reload-Mechanismus, der zuvor als "Bearbeiten" und "Weiter" bezeichnet wurde, behandelt die meisten Arten von Codeänderungen innerhalb von Methodentexten. Die meisten Änderungen außerhalb von Methodentexten und einige Änderungen innerhalb von Methodentexten können jedoch nicht während des Debuggens angewendet werden. Um diese nicht unterstützten Änderungen anzuwenden, müssen Sie das Debuggen beenden und mit einer neuen Version des Codes neu starten.
Der Bearbeitungs- und Fortsetzungsmechanismus behandelt die meisten Arten von Codeänderungen innerhalb von Methodenkörpern. Die meisten Änderungen außerhalb von Methodentexten und einige Änderungen innerhalb von Methodentexten können jedoch nicht während des Debuggens angewendet werden. Um diese nicht unterstützten Änderungen anzuwenden, müssen Sie das Debuggen beenden und mit einer neuen Version des Codes neu starten.
Unterstützte Änderungen am Code
In der folgenden Tabelle sind die Änderungen aufgeführt, die während einer Debugsitzung möglicherweise an C# und Visual Basic-Code vorgenommen werden, ohne die Sitzung neu zu starten.
Sprachelement oder -feature | Unterstützter Bearbeitungsvorgang | Begrenzungen |
---|---|---|
Arten | Hinzufügen von Methoden, Feldern, Konstruktoren und mehr | Ja |
Iteratoren | Hinzufügen oder Ändern | Nein |
async-/await-Ausdrücke | Hinzufügen oder Ändern | Ja |
Dynamische Objekte | Hinzufügen oder Ändern | Nein |
Lambda-Ausdrücke | Hinzufügen oder Ändern | Ja |
LINQ-Ausdrücke | Hinzufügen oder Ändern | identisch mit Lambda-Ausdrücken |
Generika | Hinzufügen oder Ändern | Ja |
Sprachenelement oder Merkmal | Unterstützter Bearbeitungsvorgang | Begrenzungen |
---|---|---|
Arten | Hinzufügen von Methoden, Feldern, Konstruktoren und mehr | Ja |
Iteratoren | Hinzufügen oder Ändern | Nein |
async-/await-Ausdrücke | Hinzufügen oder Ändern | Ja |
Dynamische Objekte | Hinzufügen oder Ändern | Nein |
Lambda-Ausdrücke | Hinzufügen oder Ändern | Ja |
LINQ-Ausdrücke | Hinzufügen oder Ändern | identisch mit Lambda-Ausdrücken |
Anmerkung
Neuere Sprachfeatures wie Zeichenfolgeninterpolation und nullbedingte Operatoren werden in der Regel von "Bearbeiten" und "Weiter" unterstützt. Aktuelle Informationen finden Sie im Artikel zu den von EnC unterstützten Bearbeitungen.
.NET 6+ Verbesserungen
Verbesserungen in .NET 6+ und Visual Studio 2022 und höheren Versionen umfassen Unterstützung für weitere Bearbeitungstypen, die über das hinausgehen, was ursprünglich in älteren Versionen von Visual Studio möglich war. Diese Verbesserungen stehen sowohl für 'Hot Reload' als auch für 'Editieren und Fortfahren' zur Verfügung.
Die .NET 6+ Hot Reload-Funktion basiert auf dem Mechanismus zum Bearbeiten und Fortfahren sowie auf Roslyn. Unterstützte Bearbeitungen listet die Arten von Bearbeitungen auf, die derzeit von Roslyn und potenziellen zukünftigen Verbesserungen unterstützt werden.
Nicht unterstützte Änderungen am Code
Die folgenden Änderungen können während einer Debugsitzung nicht auf C# und Visual Basic-Code angewendet werden.
Änderungen an der aktuellen Anweisung oder einer beliebigen anderen aktiven Anweisung.
Eine aktive Anweisung ist eine beliebige Anweisung in einer Funktion im Aufrufstapel, die aufgerufen wurde, um zur aktuellen Anweisung zu gelangen.
Die aktuelle Anweisung erscheint im Quellcodefenster vor einem gelben Hintergrund. Andere aktive Anweisungen erscheinen vor einem schattierten Hintergrund und sind schreibgeschützt. Diese Standardfarben können im Dialogfeld Optionen geändert werden.
Alle nicht unterstützten Änderungen am Code nach Sprachelement, wie in der folgenden Tabelle beschrieben.
Sprachenelement oder -merkmal Nicht unterstützter Bearbeitungsvorgang Alle Codeelemente Umbenennung Namespaces Hinzufügen Namespaces, Typen, Mitglieder Löschen Schnittstellen Ändern Arten Hinzufügen abstrakter oder virtueller Member, Hinzufügen von Außerkraftsetzung (siehe Details) Arten Hinzufügen eines Destruktors Member – Ändern eines Members, der auf einen eingebetteten Interoptyp verweist
- Ändern eines statischen Elements, nachdem bereits auf ein statisches Element zugegriffen wurde, indem Code ausgeführt wirdMember (Visual Basic) – Ändern eines Members mit On Error- oder Resume-Anweisung
– Ändern eines Mitglieds, das eine Aggregat-, Group By-, Simple Join- oder Group Join-LINQ-Abfrageklausel enthält.Methodik - Signaturen ändern
- Machen Sie eine abstrakte Methode nicht abstrakt, indem Sie einen Methodenkörper hinzufügen
– Löschen eines MethodenkörpersAttribute Hinzufügen oder Ändern Ereignisse oder Eigenschaften Ändern eines Typparameters, eines Basistyps, eines Delegatentyps oder eines Rückgabetyps Operatoren oder Indexer Ändern eines Typparameters, eines Basistyps, eines Delegatentyps oder eines Rückgabetyps catch-Blöcke Ändern, wenn eine aktive Anweisung enthalten ist Blöcke vom Typ „try-catch-finally“ Ändern, wenn es eine aktive Erklärung enthält using-Anweisungen Hinzufügen async-Methoden oder -Lambdaausdrücke Ändern einer async-Methode bzw. eines async-Lambdaausdrucks in einem Projekt für .NET Framework 4 und niedrigere Versionen (siehe Details) Iteratoren Ändern Sie einen Iterator in einem Projekt für .NET Framework 4 und früheren Versionen (siehe Details) Sprachelement oder Funktion Nicht unterstützter Bearbeitungsvorgang Alle Codeelemente Umbenennung Namespaces Hinzufügen Namespaces, Typen, Mitglieder Löschen Generika Hinzufügen oder Ändern Schnittstellen Ändern Arten Hinzufügen abstrakter oder virtueller Member, Hinzufügen von Außerkraftsetzung (siehe Details) Arten Hinzufügen eines Destruktors Member – Ändern eines Members, der auf einen eingebetteten Interoptyp verweist
- Ändern eines statischen Elements, nachdem bereits auf ein statisches Element zugegriffen wurde, indem Code ausgeführt wirdMember (Visual Basic) – Ändern eines Members mit On Error- oder Resume-Anweisung
– Ändern eines Members, der eine LINQ-Abfrageklausel vom Typ „Aggregate“, „Group By“, „Simple Join“ oder „Group Join“ enthältMethodik - Signaturen ändern
- Machen Sie eine abstrakte Methode nicht abstrakt, indem Sie einen Methodenkörper hinzufügen
– Löschen eines MethodenkörpersAttribute Hinzufügen oder Ändern Ereignisse oder Eigenschaften Ändern eines Typparameters, eines Basistyps, eines Delegatentyps oder eines Rückgabetyps Operatoren oder Indexer Ändern eines Typparameters, eines Basistyps, eines Delegatentyps oder eines Rückgabetyps catch-Blöcke Ändern, wenn es eine aktive Aussage enthält Blöcke vom Typ „try-catch-finally“ Ändern, wenn eine aktive Anweisung enthalten ist using-Anweisungen Hinzufügen async-Methoden oder -Lambdaausdrücke Ändern einer async-Methode bzw. eines async-Lambdaausdrucks in einem Projekt für .NET Framework 4 und niedrigere Versionen (siehe Details) Iteratoren Ändern eines Iterators in einem Projekt, das auf .NET Framework 4 oder älter abzielt (siehe Details)
Unsicherer Code
Änderungen an unsicherem Code haben dieselben Einschränkungen wie Änderungen an sicherem Code mit einer zusätzlichen Einschränkung: "Bearbeiten" und "Weiter" unterstützen keine Änderungen an unsicherem Code, der innerhalb einer Methode beendet wird, die den stackalloc
-Operator enthält.
Anwendungsunterstützung
Zu den unterstützten Anwendungen gehören:
- UWP-Apps in Windows 10 oder Windows 11
- x86- und x64-Apps, die auf den .NET Framework 4.6-Desktop oder höhere Versionen abzielen (.NET Framework ist nur eine Desktopversion)
Für .NET 6 und höher wird die Bearbeitung für die folgenden Dateitypen unterstützt:
- .cshtml
- .razor
Nicht unterstützte Apps, Plattformen und Vorgänge
Nicht unterstützte Anwendungen oder Plattformen umfassen:
- F#
- .NET Native
- Silverlight 5
- Windows 8.1
- Xamarin.Forms (iOS und Android)
Für ASP.NET und ASP.NET Core wird die Bearbeitung für die folgenden Dateitypen nicht unterstützt:
- .aspx
- .ascx
- .aspx
- .ascx
- .cshtml
- .razor
Nicht unterstützte Szenarien
Bearbeiten und Fortfahren ist in den folgenden Debugszenarien nicht verfügbar:
Debuggen im gemischten Modus (nativ/verwaltet)
Fehlersuche auf Arm64 ohne Ausrichtung auf .NET 7 oder höher.
Debuggen mit dem COR_ENABLE_PROFILING Umgebungsvariablensatz.
Debuggen einer Anwendung mit „An Prozess anhängen“ (Debuggen > An Prozess anhängen), anstatt die Anwendung durch Auswählen von Start im Menü Debuggen auszuführen Wenn Sie "Bearbeiten" und "Weiter" beim Anfügen an einen Prozess verwenden möchten, muss die COMPLUS_ForceENC Umgebungsvariable vor dem Starten des Prozesses festgelegt werden (
set COMPLUS_ForceENC=1
).Fehlersuche mit nicht deterministischen (z. B. zeitbasierten) Assemblyversionen. Wenn Sie "Edit and Continue" verwenden möchten, sollten Sie die Version nur in Release-Builds (oder CI-Builds) festlegen und die Version in Debug-Builds konstant halten.
Das Debugging von optimiertem Code.
SQL-Debuggen
Debuggen einer Abbilddatei
Debuggen einer eingebetteten Laufzeitanwendung.
Debuggen einer alten Version des Codes, nachdem eine neue Version aufgrund von Buildfehlern nicht erstellt werden konnte.