Freigeben über


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 wird
    Member (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örpers
    Attribute 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 wird
    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
    Methodik - Signaturen ändern
    - Machen Sie eine abstrakte Methode nicht abstrakt, indem Sie einen Methodenkörper hinzufügen
    – Löschen eines Methodenkörpers
    Attribute 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.