Obsługiwane zmiany kodu (C# i Visual Basic)
Mechanizm przeładowywania na gorąco, wcześniej nazywany "Edytuj i Kontynuuj", obsługuje większość typów zmian kodu w ciałach metod. Większości zmian poza ciałami metod i kilku zmian w ciałach metod nie można jednak zastosować podczas debugowania. Aby zastosować te nieobsługiwane zmiany, należy zatrzymać debugowanie i ponownie uruchomić przy użyciu nowej wersji kodu.
Mechanizm Edytuj i Kontynuuj obsługuje większość typów zmian kodu wewnątrz ciał metod. Większości zmian poza ciałami metod i kilku zmian w ciałach metod nie można jednak zastosować podczas debugowania. Aby zastosować te nieobsługiwane zmiany, należy zatrzymać debugowanie i ponownie uruchomić przy użyciu nowej wersji kodu.
Obsługiwane zmiany w kodzie
W poniższej tabeli przedstawiono zmiany, które mogą zostać wprowadzone w kodzie C# i Visual Basic podczas sesji debugowania bez ponownego uruchamiania sesji.
Element języka lub funkcja | Obsługiwana operacja edycji | Ograniczenia |
---|---|---|
Typy | Dodawanie metod, pól, konstruktorów i innych | Tak |
Iteratory | Dodawanie lub modyfikowanie | Nie |
wyrażenia asynchroniczne/await | Dodawanie lub modyfikowanie | Tak |
Obiekty dynamiczne | Dodawanie lub modyfikowanie | Nie |
wyrażenia lambda | Dodawanie lub modyfikowanie | Tak |
Wyrażenia LINQ | Dodawanie lub modyfikowanie | takie same jak wyrażenia lambda |
Generyczne | Dodawanie lub modyfikowanie | Tak |
Element języka lub funkcja | Obsługiwana operacja edycji | Ograniczenia |
---|---|---|
Typy | Dodawanie metod, pól, konstruktorów i innych | Tak |
Iteratory | Dodawanie lub modyfikowanie | Nie |
wyrażenia asynchroniczne/await | Dodawanie lub modyfikowanie | Tak |
Obiekty dynamiczne | Dodawanie lub modyfikowanie | Nie |
wyrażenia lambda | Dodawanie lub modyfikowanie | Tak |
Wyrażenia LINQ | Dodawanie lub modyfikowanie | takie same jak wyrażenia lambda |
Notatka
Nowsze funkcje języka, takie jak interpolacja ciągów i operatory warunkowe o wartości null, są ogólnie obsługiwane przez opcje Edytuj i Kontynuuj. Aby uzyskać najbardziej aktualne informacje, zobacz stronę Enc Obsługiwane Edycje.
Ulepszenia platformy .NET 6+
Ulepszenia w programach .NET 6+ i Visual Studio 2022 i nowszych wersjach obejmują obsługę większej liczby typów edycji wykraczających poza to, co było pierwotnie możliwe w starszych wersjach programu Visual Studio. Te usprawnienia są dostępne zarówno dla funkcji Hot Reload, jak i doświadczenia Edytuj i Kontynuuj.
Środowisko ponownego ładowania na gorąco platformy .NET 6+ jest obsługiwane przez mechanizm Edytuj i kontynuuj oraz Roslyn. Obsługiwane edycje zawiera listę typów edycji obecnie obsługiwanych przez roslyn i potencjalne przyszłe ulepszenia.
Nieobsługiwane zmiany w kodzie
W trakcie sesji debugowania nie można zastosować następujących zmian w kodzie C# i Visual Basic.
Zmiany w bieżącym oświadczeniu lub innym aktywnym oświadczeniu.
Aktywna instrukcja to dowolna instrukcja w funkcji w stosie wywołań, która została wywołana, aby przejść do bieżącej instrukcji.
Bieżąca instrukcja jest wyświetlana na żółtym tle w oknie źródłowym. Inne aktywne instrukcje są wyświetlane na cieniowanym tle i są przeznaczone tylko do odczytu. Te kolory domyślne można zmienić w oknie dialogowym Opcje.
Wszelkie nieobsługiwane zmiany w kodzie według elementu języka, jak opisano w poniższej tabeli.
Element języka lub funkcja Nieobsługiwana operacja edycji Wszystkie elementy kodu Zmienianie nazw Przestrzenie nazw Dodaj Przestrzenie nazw, typy, elementy członkowskie Usunąć Interfejsy Modyfikować Typy Dodawanie abstrakcyjnego lub wirtualnego elementu członkowskiego, dodawanie przesłonięcia (zobacz szczegóły) Typy Dodaj destruktor Członkowie - Modyfikowanie członka odwołującego się do osadzonego typu międzyoperacyjnego
— Zmodyfikuj statyczny członek po uzyskaniu do niego dostępu przez wykonanie koduCzłonkowie (Visual Basic) - Modyfikowanie członka za pomocą instrukcji On Error lub Resume
— Modyfikowanie elementu członkowskiego zawierającego klauzulę zapytania Agregacja, Grupuj według, Proste dołączanie lub Dołączanie do grupy LINQMetody - Modyfikowanie podpisów
- Przekształć metodę abstrakcyjną w nieabstrakcyjną przez dodanie ciała metody
- Usuń treść metodyAtrybuty Dodawanie lub modyfikowanie Zdarzenia lub właściwości Modyfikowanie parametru typu, typu podstawowego, typu delegata lub zwracanego typu Operatory lub indeksatory Modyfikowanie parametru typu, typu podstawowego, typu delegata lub zwracanego typu bloki catch Zmodyfikuj, gdy zawiera aktywną instrukcję bloki try-catch-finally Zmodyfikuj, gdy zawiera aktywne stwierdzenie instrukcje using Dodawać asynchroniczne metody/lambdy Modyfikowanie metody asynchronicznej lub wyrażenia lambda w projekcie przeznaczonym dla platformy .NET Framework 4 i starszych (zobacz szczegóły i). Iteratory Zmodyfikuj iterator w projekcie przeznaczonym dla platformy .NET Framework 4 i wcześniejszych wersji (zobacz szczegóły) Element języka lub funkcja Nieobsługiwana operacja edycji Wszystkie elementy kodu Zmienianie nazw Przestrzenie nazw Dodaj Przestrzenie nazw, typy, elementy Usunąć Generyczne Dodawanie lub modyfikowanie Interfejsy Modyfikuj Typy Dodawanie abstrakcyjnego lub wirtualnego elementu członkowskiego, dodawanie przesłonięcia (zobacz szczegóły) Typy Dodaj destruktor Członkowie - Modyfikacja elementu członkowskiego odwołującego się do osadzonego typu międzyoperacyjnego
- Zmodyfikuj statyczny element członkowski po jego wcześniejszym dostępie podczas wykonywania koduCzłonkowie (Visual Basic) - Zmodyfikować element członkowski za pomocą instrukcji On Error lub Resume
— Modyfikowanie elementu członkowskiego zawierającego klauzulę zapytania Agregacja, Grupuj według, Proste dołączanie lub Dołączanie do grupy LINQMetody - Modyfikowanie podpisów
- Przekształcenie metody abstrakcyjnej w nieabstrakcyjną poprzez dodanie treści metody
- Usuń treść metodyAtrybuty Dodawanie lub modyfikowanie Zdarzenia lub właściwości Modyfikowanie parametru typu, typu podstawowego, typu delegata lub zwracanego typu Operatory lub indeksatory Modyfikowanie parametru typu, typu podstawowego, typu delegata lub zwracanego typu bloki przechwytywania Zmodyfikuj, gdy zawiera aktywną instrukcję bloki try-catch-finally Modyfikuj, gdy zawiera aktywną instrukcję instrukcje using Dodaj Asynchroniczne metody/wyrażenia lambda Zmodyfikuj metodę asynchroniczną/lambdę w projekcie przeznaczonym na platformę .NET Framework 4 i niższe (zobacz szczegóły) Iteratory Modyfikowanie iteratora w projekcie przeznaczonym dla platformy .NET Framework 4 i starszych (zobacz szczegóły)
Niebezpieczny kod
Zmiany w niebezpiecznym kodzie mają takie same ograniczenia jak zmiany w bezpiecznym kodzie z jednym dodatkowym ograniczeniem: Edytowanie i kontynuowanie nie obsługuje zmian w niebezpiecznym kodzie, który kończy działanie w metodzie zawierającej operator stackalloc
.
Obsługa aplikacji
Obsługiwane aplikacje obejmują:
- Aplikacje platformy UWP w systemie Windows 10 lub Windows 11
- Aplikacje x86 i x64, które są przeznaczone dla platformy .NET Framework w wersji 4.6 lub nowszej (program .NET Framework jest przeznaczony wyłącznie na komputery stacjonarne).
W przypadku platformy .NET 6 i nowszych edytowanie jest obsługiwane dla następujących typów plików:
- .cshtml
- .razor
Nieobsługiwane aplikacje, platformy i operacje
Nieobsługiwane aplikacje lub platformy obejmują:
- F#
- .NET Native
- Silverlight 5
- Windows 8.1
- Xamarin.Forms (iOS i Android)
W przypadku ASP.NET i ASP.NET Core edytowanie nie jest obsługiwane w przypadku następujących typów plików:
- .aspx
- .ascx
- .aspx
- .ascx
- .cshtml
- .razor
Nieobsługiwane scenariusze
Edytowanie i kontynuowanie nie jest dostępne w następujących scenariuszach debugowania:
Debugowanie w trybie mieszanym (natywnym/zarządzanym).
Debugowanie na Arm64 bez celowania w platformę .NET 7 lub nowszą.
Debugowanie przy użyciu zestawu zmiennych środowiskowych COR_ENABLE_PROFILING.
Debugowanie aplikacji przy użyciu dołączania do procesu (Debugowanie > Dołączanie do procesu) zamiast uruchamiania aplikacji, wybierając pozycję Uruchom z menu debugowania Debugowanie. Jeśli chcesz użyć opcji Edytuj i Kontynuuj podczas dołączania do procesu, przed uruchomieniem procesu należy ustawić zmienną środowiskową COMPLUS_ForceENC (
set COMPLUS_ForceENC=1
).Debugowanie przy użyciu nieokreślonych (na przykład opartych na czasie) wersji zestawów. Jeśli chcesz użyć opcji Edytuj i Kontynuuj, rozważ ustawienie wersji tylko w kompilacjach w trybie wydania (lub w kompilacjach ciągłej integracji) i utrzymanie stałej wersji w kompilacjach debugowania.
Debugowanie zoptymalizowanego kodu.
Debugowanie SQL.
Debugowanie pliku zrzutu.
Debugowanie osadzonej aplikacji środowiska uruchomieniowego.
Debugowanie starej wersji kodu po tym, jak nie można skompilować nowej wersji z powodu błędów kompilacji.