Obsługiwane zmiany kodu (C# i Visual Basic)
Mechanizm Przeładowywanie na gorąco, wcześniej nazywany Edit and Continue, obsługuje większość typów zmian kodu w ciałach metod. Większość zmian poza treściami metod i kilka zmian w ciałach metody 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 w ciałach metod. Większość zmian poza treściami metod i kilka zmian w ciałach metody 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 |
Typy ogólne | 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 |
Uwaga
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ę Edycje obsługiwane przez funkcję Enc.
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 ulepszenia są dostępne zarówno dla Przeładowywanie na gorąco, jak i środowisk Edytuj i Kontynuuj.
Środowisko platformy .NET 6+ Przeładowywanie na gorąco jest obsługiwane przez mechanizm Edytuj i kontynuuj oraz Roslyn. Obsługiwane edycje zawiera listę typów edycji, które są obecnie obsługiwane przez usługę 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żącej instrukcji lub innej aktywnej instrukcji.
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ą 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 Add Przestrzenie nazw, typy, elementy członkowskie Delete Interfejsy Modyfikowanie Typy Dodawanie abstrakcyjnego lub wirtualnego elementu członkowskiego, dodawanie przesłonięcia (zobacz szczegóły) Typy Dodawanie destruktora Członkowie - Modyfikowanie elementu członkowskiego odwołującego się do osadzonego typu międzyoperacyjnej
— Zmodyfikuj statyczny element członkowski po jego dokonaniu dostępu przez wykonanie koduElementy członkowskie (Visual Basic) - Modyfikowanie elementu członkowskiego 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
- Tworzenie metody abstrakcyjnej staje się nieabstraktowe przez 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 catch Modyfikowanie, gdy zawiera aktywną instrukcję bloki try-catch-finally Modyfikowanie, gdy zawiera aktywną instrukcję instrukcje using Add async methods/lambdas Modyfikowanie metody asynchronicznej/lambda w projekcie przeznaczonym dla programu .NET Framework 4 i niższych (zobacz szczegóły) Iteratory Modyfikowanie iteratora w projekcie przeznaczonym dla platformy .NET Framework 4 i starszych (zobacz szczegóły) Element języka lub funkcja Nieobsługiwana operacja edycji Wszystkie elementy kodu Zmienianie nazw Przestrzenie nazw Add Przestrzenie nazw, typy, elementy członkowskie Delete Typy ogólne Dodawanie lub modyfikowanie Interfejsy Modyfikowanie Typy Dodawanie abstrakcyjnego lub wirtualnego elementu członkowskiego, dodawanie przesłonięcia (zobacz szczegóły) Typy Dodawanie destruktora Członkowie - Modyfikowanie elementu członkowskiego odwołującego się do osadzonego typu międzyoperacyjnej
— Zmodyfikuj statyczny element członkowski po jego dokonaniu dostępu przez wykonanie koduElementy członkowskie (Visual Basic) - Modyfikowanie elementu członkowskiego 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
- Tworzenie metody abstrakcyjnej staje się nieabstraktowe przez 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 catch Modyfikowanie, gdy zawiera aktywną instrukcję bloki try-catch-finally Modyfikowanie, gdy zawiera aktywną instrukcję instrukcje using Add async methods/lambdas Modyfikowanie metody asynchronicznej/lambda w projekcie przeznaczonym dla programu .NET Framework 4 i niższych (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 stackalloc
operator.
Obsługa aplikacji
Obsługiwane aplikacje obejmują:
- Aplikacje platformy UWP w systemie Windows 10 lub Windows 11
- Aplikacje x86 i x64 przeznaczone dla komputerów stacjonarnych .NET Framework 4.6 lub nowszych (program .NET Framework jest tylko wersją klasyczną)
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 w usłudze Arm64 bez określania wartości docelowej platformy .NET 7 lub nowszej.
Debugowanie przy użyciu zestawu zmiennych środowiskowych COR_ENABLE_PROFILING .
Debugowanie aplikacji przy użyciu dołączania do procesu (debugowanie > dołączania do procesu) zamiast uruchamiania aplikacji, wybierając pozycję Rozpocznij z menu 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 wydania (lub ciągłej integracji) i zachowaj stałą wersję 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.