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 voerenLeden (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, wijzigenMethoden - 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, 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 voerenLeden (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 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, 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.