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 bewerkingshandeling | 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 instructie of een andere actieve instructie.
Een actieve instructie is een instructie in een functie op de aanroepstack die is aangeroepen om naar de huidige instructie te gaan.
De huidige verklaring verschijnt op een gele achtergrond in het bronvenster. Andere actieve verklaringen worden weergegeven op een gearceerde achtergrond en staan 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 bewerkingsoperatie Alle code-elementen Hernoemen Naamruimten Toevoegen Naamruimten, typen, leden Verwijderen Interfaces Modificeren Typen Abstract of virtueel lid toevoegen, override toevoegen (zie details) Typen Destructor toevoegen Leden - Een lid wijzigen dat verwijst naar een ingesloten interoperabiliteitstype
- Een statisch lid wijzigen nadat het al is geopend door code uit te voerenLeden (Visual Basic) - Een lid wijzigen met de instructie On Error of Resume
- Pas een lid aan dat een samenvoegings-, Group By-, Simple Join- of Group Join LINQ-query bevatMethoden - Handtekeningen wijzigen
- Een abstracte methode niet-abstract maken door een methodetekst toe te voegen
- Hoofdtekst van methode verwijderenKenmerken Toevoegen of wijzigen Gebeurtenissen of eigenschappen Een typeparameter, basistype, gedelegeerd type of retourtype wijzigen Operators of indexeerders Een typeparameter, basistype, delegetype of retourtype wijzigen catch-blokken Wijzigen wanneer deze een actieve instructie bevat probeer-vang-eindelijk blokken Wijzigen wanneer deze een actieve instructie bevat toepassen van uitspraken Toevoegen asynchrone methoden/lambdas Een asynchrone methode/lambda wijzigen in een project dat is gericht op .NET Framework 4 en lager (zie details) Iteratoren 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 Generics Toevoegen of wijzigen Interfaces Modificeren Typen Abstracte of virtuele functie toevoegen, overschrijven toevoegen (zie details) Typen Destructor toevoegen Leden - Een lid dat naar een ingesloten interop-type verwijst wijzigen
- Een statisch lid wijzigen nadat het al is geopend door code uit te voerenLeden (Visual Basic) - Een lid wijzigen met de instructie On Error of Resume
- Een lid wijzigen dat een aggregaat-, Group By-, Simple Join- of Group Join-LINQ-querycomponent bevatMethoden - Handtekeningen wijzigen
- Een abstracte methode niet-abstract maken door een methodetekst toe te voegen
- Hoofdtekst van methode verwijderenKenmerken Toevoegen of wijzigen Gebeurtenissen of eigenschappen Een typeparameter, basistype, delegatetype of retourtype wijzigen Operators of indexeerders Een typeparameter, basistype, delegatetype of retourtype wijzigen catch-blokken Wijzigen wanneer deze een actieve instructie bevat try-catch-finally-blokken Wijzigen wanneer deze een actieve instructie bevat gebruik 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) Iteratoren 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:
Debugging in een mixed-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.
Fouten opsporen in een dumpbestand.
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.