Delen via


Ondersteunde codewijzigingen (C# en Visual Basic)

Het hot-reloadmechanisme, voorheen Bewerken en Doorgaan genoemd, verwerkt de meeste typen codewijzigingen binnen methodeteksten. De meeste wijzigingen buiten methodeteksten en enkele wijzigingen binnen methodeteksten kunnen echter niet worden toegepast tijdens foutopsporing. Als u deze niet-ondersteunde wijzigingen wilt toepassen, moet u de foutopsporing stoppen en opnieuw opstarten met een nieuwe versie van de code.

Het mechanisme Bewerken en Doorgaan verwerkt de meeste typen codewijzigingen binnen methodeteksten. De meeste wijzigingen buiten methodeteksten en enkele wijzigingen binnen methodeteksten kunnen echter niet worden toegepast tijdens foutopsporing. Als u deze niet-ondersteunde wijzigingen wilt toepassen, moet u de foutopsporing stoppen en opnieuw opstarten met een nieuwe versie van de code.

Ondersteunde wijzigingen in code

In de volgende tabel ziet u de wijzigingen die kunnen worden aangebracht in C# en Visual Basic-code tijdens een foutopsporingssessie zonder de sessie opnieuw te starten.

Taalelement of functie Ondersteunde bewerkingsbewerking Beperkingen
Typen Methoden, velden, constructors en meer toevoegen Ja
Iterators Toevoegen of wijzigen Nee
async/await-expressies Toevoegen of wijzigen Ja
Dynamische objecten Toevoegen of wijzigen Nee
lambda-expressies Toevoegen of wijzigen Ja
LINQ-expressies Toevoegen of wijzigen hetzelfde als lambda-expressies
Generieken Toevoegen of wijzigen Ja
Taalelement of functie Ondersteunde bewerking voor bewerken Beperkingen
Typen Methoden, velden, constructors en meer toevoegen Ja
Iterators Toevoegen of wijzigen Nee
async/await-expressies Toevoegen of wijzigen Ja
Dynamische objecten Toevoegen of wijzigen Nee
lambda-expressies Toevoegen of wijzigen Ja
LINQ-expressies Toevoegen of wijzigen hetzelfde als lambda-expressies

Notitie

Nieuwere taalfuncties, zoals tekenreeksinterpolatie en null-voorwaardelijke operatoren, worden over het algemeen ondersteund door Bewerken en Doorgaan. Zie de pagina Ondersteunde bewerkingen voor de meest recente informatie.

Verbeteringen voor .NET 6+

Verbeteringen in .NET 6+ en Visual Studio 2022 en latere versies bevatten ondersteuning voor meer typen bewerkingen die verder gaan dan wat oorspronkelijk mogelijk was in oudere versies van Visual Studio. Deze verbeteringen zijn beschikbaar voor zowel Hot Reload als de ervaringen Bewerken en Doorgaan.

De .NET 6+ Hot Reload-ervaring wordt mogelijk gemaakt door het mechanisme Bewerken en Doorgaan en Roslyn. Ondersteunde bewerkingen bevat de typen bewerkingen die momenteel worden ondersteund door Roslyn en mogelijke toekomstige verbeteringen.

Niet-ondersteunde wijzigingen in code

De volgende wijzigingen kunnen niet worden toegepast op C# en Visual Basic-code tijdens een foutopsporingssessie.

  • Wijzigingen in de huidige verklaring of een andere actieve verklaring.

    Een actieve instructie is elke instructie in een functie op de call stack die is aangeroepen om bij de huidige instructie te komen.

    De huidige verklaring verschijnt op een gele achtergrond in het bronvenster. Andere actieve instructies worden weergegeven op een gearceerde achtergrond en zijn in alleen-lezen modus. Deze standaardkleuren kunnen worden gewijzigd in het dialoogvenster Opties.

  • Eventuele niet-ondersteunde wijzigingen in code per taalelement, zoals beschreven in de volgende tabel.

    Taalelement of functie Niet-ondersteunde bewerkingsactie
    Alle code-elementen Hernoemen
    Naamruimten Toevoegen
    Namenruimten, types, leden Verwijderen
    Interfaces Modificeren
    Typen Abstract of virtueel lid toevoegen, override toevoegen (zie details )
    Typen Destructor toevoegen
    Leden - Een lid wijzigen dat naar een ingesloten interop-type verwijst
    - Een statisch lid wijzigen nadat het al is geopend door code uit te voeren
    Leden (Visual Basic) - Een lid wijzigen met de instructie Fout of Hervatten
    - Een lid dat een samenvoegings-, Group By-, Simple Join- of Group Join LINQ-querycomponent bevat, wijzigen
    Methoden - Handtekeningen wijzigen
    - Een abstracte methode niet-abstract maken door een methodetekst toe te voegen
    - Hoofdtekst van methode verwijderen
    Kenmerken Toevoegen of wijzigen
    Gebeurtenissen of eigenschappen Een typeparameter, basistype, delegate of retourtype wijzigen
    Operators of indexeerders Wijzig een typeparameter, basistype, delegatetype of retourtype
    catch-blokken Wijzigen wanneer deze een actieve instructie bevat
    probeer-vang-eindelijk blokken Wijzigen wanneer deze een actieve instructie bevat
    using-verklaringen gebruiken Toevoegen
    asynchrone methoden/lambdas Een asynchrone methode/lambda wijzigen in een project dat is gericht op .NET Framework 4 en lager (zie details)
    Iterators Een iterator wijzigen in een project dat is gericht op .NET Framework 4 en eerder (zie details)
    Taalelement of functie Niet-ondersteunde bewerking
    Alle code-elementen Hernoemen
    Naamruimten Toevoegen
    Naamruimten, typen, leden Verwijderen
    Generieken Toevoegen of wijzigen
    Koppelvlakken Modificeren
    Typen Abstract of virtueel lid toevoegen, override toevoegen (zie details)
    Typen Destructor toevoegen
    Leden - Een lid wijzigen dat verwijst naar een ingesloten interop-type
    - Een statisch lid wijzigen nadat het al is geopend door code uit te voeren
    Leden (Visual Basic) - Wijzig een lid met de instructie On Error of Resume
    - Een lid wijzigen dat een Aggregeren-, Group By-, Simple Join- of Group Join-LINQ-query bevat
    Methoden - Handtekeningen wijzigen
    - Een abstracte methode niet-abstract maken door een methodetekst toe te voegen
    - Hoofdtekst van methode verwijderen
    Kenmerken Toevoegen of wijzigen
    Gebeurtenissen of eigenschappen Een typeparameter, basistype, delegetype of retourtype wijzigen
    Operators of indexers Een typeparameter, basistype, gemachtigde of retourtype wijzigen
    catch-blokken Wijzigen wanneer deze een actieve instructie bevat
    try-catch-finally-blokken Wijzigen wanneer deze een actieve instructie bevat
    gebruik maken van statements Toevoegen
    asynchrone methoden/lambdas Een asynchrone methode/lambda wijzigen in een project dat is gericht op .NET Framework 4 en lager (zie details)
    Iterators Een iterator wijzigen in een project dat is gericht op .NET Framework 4 en eerder (zie details)

Onveilige code

Wijzigingen in onveilige code hebben dezelfde beperkingen als wijzigingen in veilige code, met één extra beperking: Bewerken en doorgaan biedt geen ondersteuning voor wijzigingen in onveilige code die wordt afgesloten binnen een methode die de stackalloc-operator bevat.

Toepassingsondersteuning

Ondersteunde toepassingen zijn onder andere:

  • UWP-apps op Windows 10 of Windows 11
  • x86- en x64-apps die zijn gericht op de desktopversie van .NET Framework 4.6 of hoger (het .NET Framework is alleen een bureaubladversie)

Voor .NET 6 en hoger wordt bewerken ondersteund voor de volgende bestandstypen:

  • .cshtml
  • .razor

Niet-ondersteunde apps, platforms en bewerkingen

Niet-ondersteunde toepassingen of platforms zijn onder andere:

  • F#
  • .NET Native
  • Silverlight 5
  • Windows 8.1
  • Xamarin.Forms (iOS en Android)

Voor ASP.NET en ASP.NET Core wordt bewerken niet ondersteund voor de volgende bestandstypen:

  • .aspx
  • .ascx
  • .aspx
  • .ascx
  • .cshtml
  • .razor

Niet-ondersteunde scenario's

Bewerken en doorgaan is niet beschikbaar in de volgende foutopsporingsscenario's:

  • Foutopsporing in de gemengde modus (systeemeigen/beheerd).

  • Foutopsporing in Arm64 zonder gericht te zijn op .NET 7 of hoger.

  • Foutopsporing met de COR_ENABLE_PROFILING omgevingsvariabeleset.

  • Foutopsporing van een toepassing met behulp van koppelen aan proces (Foutopsporing > Koppelen aan proces) in plaats van de toepassing uit te voeren door Start te kiezen in het menu Foutopsporing. Als u Bewerken en Doorgaan wilt gebruiken bij het koppelen aan een proces, moet de omgevingsvariabele COMPLUS_ForceENC worden ingesteld voordat u het proces start (set COMPLUS_ForceENC=1).

  • Foutopsporing met niet-deterministische assemblyversies (bijvoorbeeld op basis van tijd). Als u Bewerken en Doorgaan wilt gebruiken, kunt u overwegen om de versie alleen in release-builds (of CI) in te stellen en de versie in builds voor foutopsporing constant te houden.

  • Geoptimaliseerde code voor foutopsporing.

  • SQL foutopsporing.

  • "Een dumpbestand debuggen."

  • Fouten opsporen in een ingesloten runtime-toepassing.

  • Foutopsporing van een oude versie van uw code nadat een nieuwe versie niet kon worden gebouwd vanwege buildfouten.