Udostępnij za pośrednictwem


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 kodu
    Czł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 LINQ
    Metody - Modyfikowanie podpisów
    - Przekształć metodę abstrakcyjną w nieabstrakcyjną przez dodanie ciała 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 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 kodu
    Czł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 LINQ
    Metody - Modyfikowanie podpisów
    - Przekształcenie metody abstrakcyjnej w nieabstrakcyjną poprzez 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 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.