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 kodu
    Elementy 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 LINQ
    Metody - Modyfikowanie podpisów
    - Tworzenie metody abstrakcyjnej staje się nieabstraktowe przez dodanie treści metody
    - Usuń treść metody
    Atrybuty 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 kodu
    Elementy 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 LINQ
    Metody - Modyfikowanie podpisów
    - Tworzenie metody abstrakcyjnej staje się nieabstraktowe przez dodanie treści metody
    - Usuń treść metody
    Atrybuty 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.