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 wurde
    Member (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ält
    Methoden – Ändern von Signaturen
    – Festlegen einer abstrakten Methode als nicht abstrakte Methode durch Hinzufügen eines Methodenkörpers
    – Löschen eines Methodenkörpers
    Attribute 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 wurde
    Member (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ält
    Methoden – Ändern von Signaturen
    – Festlegen einer abstrakten Methode als nicht abstrakte Methode durch Hinzufügen eines Methodenkörpers
    – Löschen eines Methodenkörpers
    Attribute 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.