Unterstützte Codeänderungen (C# und Visual Basic)
Der Hot Reload-Mechanismus, der ehemals „Bearbeiten und Weiter“ genannt wurde, behandelt die meisten Arten von Codeänderungen innerhalb von Methodentexten. Die meisten Änderungen außerhalb von Methodentexten sowie einige Änderungen in Methodentexten können jedoch während des Debuggens nicht angewendet werden. Wenn Sie diese nicht unterstützten Änderungen übernehmen möchten, müssen Sie das Debuggen beenden und mit einer neuen Version des Codes erneut starten.
Der Bearbeitungs- und Fortsetzungsmechanismus behandelt die meisten Arten von Codeänderungen in Methodentexten. Die meisten Änderungen außerhalb von Methodentexten sowie einige Änderungen in Methodentexten können jedoch während des Debuggens nicht angewendet werden. Wenn Sie diese nicht unterstützten Änderungen übernehmen möchten, müssen Sie das Debuggen beenden und mit einer neuen Version des Codes erneut starten.
Unterstützte Änderungen an Code
In der folgenden Tabelle sind die Änderungen aufgeführt, die während einer Debugsitzung ohne Neustart der Sitzung an C#- und Visual Basic-Code vorgenommen werden können.
Sprachelement oder -feature | Unterstützter Bearbeitungsvorgang | Einschränkungen |
---|---|---|
Typen | Hinzufügen von Methoden, Feldern, Konstruktoren und mehr | Ja |
Iterators | Hinzufügen oder ändern | Nein |
async-/await-Ausdrücke | Hinzufügen oder ändern | Ja |
Dynamische Objekte | Hinzufügen oder ändern | Nein |
Lambdaausdrücke | Hinzufügen oder ändern | Ja |
LINQ-Ausdrücke | Hinzufügen oder ändern | Wie bei Lambdaausdrücken |
Generics | Hinzufügen oder ändern | Ja |
Sprachelement oder -feature | Unterstützter Bearbeitungsvorgang | Einschränkungen |
---|---|---|
Typen | Hinzufügen von Methoden, Feldern, Konstruktoren und mehr | Ja |
Iterators | Hinzufügen oder ändern | Nein |
async-/await-Ausdrücke | Hinzufügen oder ändern | Ja |
Dynamische Objekte | Hinzufügen oder ändern | Nein |
Lambdaausdrücke | Hinzufügen oder ändern | Ja |
LINQ-Ausdrücke | Hinzufügen oder ändern | Wie bei Lambdaausdrücken |
Hinweis
Neuere Sprachfeatures wie Zeichenfolgeninterpolation und NULL-bedingte Operatoren werden von „Bearbeiten und Fortfahren“ in der Regel unterstützt. Aktuelle Informationen finden Sie auf der Seite Von „Bearbeiten und Fortfahren“ unterstützte Bearbeitungsvorgänge.
Verbesserungen in .NET 6+
Verbesserungen in .NET 6+ und Visual Studio 2022 und höheren Versionen umfassen die Unterstützung für weitere Bearbeitungsarten zusätzlich zu den ursprünglich in älteren Versionen von Visual Studio vorhandenen. Diese Verbesserungen sind sowohl für Hot Reload als auch für „Bearbeiten und fortfahren“ verfügbar.
Die .NET 6+ Hot Reload-Funktion basiert auf dem Mechanismus von Bearbeiten und Fortfahren und Roslyn. Unterstützte Bearbeitungen listet die Typen von Bearbeitungen auf, die derzeit von Roslyn unterstützt werden, und potenzielle zukünftige Verbesserungen.
Nicht unterstützte Änderungen an Code
Folgende Änderungen können während einer Debugsitzung an C#- und Visual Basic-Code nicht angewendet werden.
Änderungen an der aktuellen Anweisung oder einer beliebigen anderen aktiven Anweisung.
Eine aktive Anweisung ist eine Anweisungen in einer Funktion der Aufrufliste, 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.
Sprachelement oder -feature Nicht unterstützter Bearbeitungsvorgang Alle Codeelemente Umbenennen Namespaces Hinzufügen Namespaces, Typen, Member Löschen Schnittstellen Ändern Typen Hinzufügen abstrakter oder virtueller Member, Hinzufügen von Außerkraftsetzung (siehe Details) Typen Destruktor hinzufügen Member – Ändern eines Members, der auf einen eingebetteten Interoptyp verweist
– Ändern eines statischen Members, nachdem darauf durch Ausführen von Code bereits zugegriffen wurdeMember (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ältMethoden – Ändern von Signaturen
– Festlegen einer abstrakten Methode als nicht abstrakte Methode durch Hinzufügen eines Methodenkörpers
– Löschen eines MethodenkörpersAttribute Hinzufügen oder ändern Ereignisse oder Eigenschaften Ändern eines Typparameters, Basistyps, Delegattyps oder Rückgabetyps Operatoren oder Indexer Ändern eines Typparameters, Basistyps, Delegattyps oder Rückgabetyps catch-Blöcke Ändern, wenn eine aktive Anweisung enthalten ist 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 oder eines Async-Lambdaausdrucks in einem Projekt für .NET Framework 4 und niedrigere Versionen (siehe Details) Iteratoren Ändern eines Iterators in einem Projekt für .NET Framework 4 und früheren Versionen (siehe Details) Sprachelement oder -feature Nicht unterstützter Bearbeitungsvorgang Alle Codeelemente Umbenennen Namespaces Hinzufügen Namespaces, Typen, Member Löschen Generics Hinzufügen oder ändern Schnittstellen Ändern Typen Hinzufügen abstrakter oder virtueller Member, Hinzufügen von Außerkraftsetzung (siehe Details) Typen Destruktor hinzufügen Member – Ändern eines Members, der auf einen eingebetteten Interoptyp verweist
– Ändern eines statischen Members, nachdem darauf durch Ausführen von Code bereits zugegriffen wurdeMember (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ältMethoden – Ändern von Signaturen
– Festlegen einer abstrakten Methode als nicht abstrakte Methode durch Hinzufügen eines Methodenkörpers
– Löschen eines MethodenkörpersAttribute Hinzufügen oder ändern Ereignisse oder Eigenschaften Ändern eines Typparameters, Basistyps, Delegattyps oder Rückgabetyps Operatoren oder Indexer Ändern eines Typparameters, Basistyps, Delegattyps oder Rückgabetyps catch-Blöcke Ändern, wenn eine aktive Anweisung enthalten ist 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 oder eines Async-Lambdaausdrucks in einem Projekt für .NET Framework 4 und niedrigere Versionen (siehe Details) Iteratoren Ändern eines Iterators in einem Projekt für .NET Framework 4 und früheren Versionen (siehe Details)
Unsicherer Code
Bei Änderungen an unsicherem Code gelten dieselben Einschränkungen wie bei Änderungen an sicherem Code. Es gibt allerdings eine zusätzliche Einschränkung: „Bearbeiten und Fortfahren“ unterstützt keine Änderungen an unsicherem Code, der sich innerhalb einer Methode mit dem Operator stackalloc
befindet.
Anwendungsunterstützung
Unterstützte Anwendungen umfassen:
- UWP-Apps in Windows 10 oder Windows 11
- x86- und x64-Apps, die für die Desktopversion von .NET Framework 4.6 oder höhere Versionen vorgesehen sind (.NET Framework ist nur als Desktopversion verfügbar.)
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
Zu den nicht unterstützten Anwendungen oder Plattformen gehören:
- 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“ steht in den folgenden Debugszenarien nicht zur Verfügung:
Debuggen im gemischten Modus (systemeigen/verwaltet).
Debuggen auf Arm64 ohne Ausrichtung auf .NET 7 oder höher.
Debuggen mit festgelegter COR_ENABLE_PROFILING-Umgebungsvariablen.
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 beim Anfügen an einen Prozess „Bearbeiten und fortfahren“ verwenden möchten, muss die COMPLUS_ForceENC-Umgebungsvariable vor dem Starten des Prozesses festgelegt werden (
set COMPLUS_ForceENC=1
).Debuggen mit nicht deterministischen (z. B. zeitbasierten) Assemblyversionen. Wenn Sie „Bearbeiten und fortfahren“ verwenden möchten, sollten Sie die Version nur in Releasebuilds (oder CI-Builds) festlegen und die Version in Debugbuilds konstant halten.
Debuggen von optimiertem Code.
SQL-Debuggen.
Debuggen einer Dumpdatei.
Debuggen einer eingebetteten Laufzeitanwendung.
Debuggen einer alten Version des Codes, wenn eine neue Version aufgrund von Buildfehlern nicht erstellt werden konnte.