Udostępnij za pośrednictwem


Pisanie i debugowanie uruchomionego kodu przy użyciu Przeładowywanie na gorąco w Visual Studio (C#, Visual Basic, C++)

Przeładowywanie na gorąco była wcześniej znana jako Edytuj i kontynuuj w dokumentacji Visual Studio oraz w starszej wersji tekstu interfejsu użytkownika.

Począwszy od Visual Studio 2022 r., środowisko Przeładowywanie na gorąco w usłudze Visual Studio działa zarówno dla zarządzanych .NET, jak i natywnych aplikacji języka C++. Niezależnie od typu aplikacji, nad którą pracujesz, intencją funkcji Przeładowywanie na gorąco jest zmniejszenie liczby ponownych uruchomień aplikacji między edycjami, co zwiększa Twoją produktywność poprzez skrócenie czasu oczekiwania na ponowne skompilowanie, ponowne uruchomienie aplikacji oraz przywrócenie poprzedniego miejsca w samej aplikacji.

Zwiększamy produktywność dzięki możliwości edytowania plików kodu aplikacji i natychmiastowego stosowania zmian kodu do uruchomionej aplikacji, znanej również jako Przeładowywanie na gorąco. Po zastosowaniu zmian ponownie wykonaj kod, wykonując akcję w samej aplikacji (lub przez jakiś czasomierz itp.) i natychmiast wyświetlając zmiany; nie jest wymagane wstrzymanie aplikacji za pośrednictwem punktów przerwania!

Aktualizowanie uruchomionego kodu przy użyciu Przeładowywanie na gorąco

  1. Otwórz projekt na podstawie obsługiwanego typu aplikacji. Zobacz .NET i C++ obsługiwane aplikacje.

  2. Uruchom aplikację przy użyciu debugera dołączonego przy użyciu F5 lub , jeśli jest obsługiwana, Ctrl+F5.

  3. Otwórz plik kodu i zmień kod.

  4. Zastosuj zmiany kodu przy użyciu Przeładowywanie na gorącoZrzut ekranu przedstawiający ikonę Przeładowywanie na gorąco., lub przyciśnij ALT+F10.

     Zrzut ekranu przedstawiający Przeładowywanie na gorąco.

Aby zobaczyć zmiany w interfejsie użytkownika, należy ponownie wykonać kod. Na przykład kod odpowiadający za przycisk musi zostać ponownie uruchomiony lub kod, który jest wyzwalany w regularnych odstępach czasu za pomocą timera. Jako inny przykład, ASP.NET Core obsługuje automatyczne odświeżanie przeglądarki dzięki funkcjonalności MetadataUpdateHandler.

Obsługa aplikacji .NET

  • W przypadku korzystania z Visual Studio 2022 r. i uruchamiania aplikacji przy użyciu debugera podstawowe środowisko Przeładowywanie na gorąco współpracuje z większością typów aplikacji .NET i wersji platformy. Ta obsługa obejmuje .NET Framework, .NET Core i .NET 5+ (zarówno dla języka C#, jak i Visual Basic zgodnie z zastosowaniem). Oczekiwanie w tym scenariuszu polega na tym, że jeśli używasz debugera, załóżmy, że Przeładowywanie na gorąco jest dla Ciebie dostępny i spróbuj!
  • W przypadku korzystania z Visual Studio 2022, ale nie przy użyciu debugera (na przykład przy użyciu CTRL-F5 do uruchamiania aplikacji), Przeładowywanie na gorąco jest dostępna, gdy jest przeznaczona dla większości typów aplikacji .NET 6. W tym scenariuszu aplikacje, które nie są przeznaczone dla .NET 6 lub nowszych (czyli .NET 5 lub starszych), nie obsługują scenariusza "brak debugera" i muszą korzystać z debugera, aby uzyskać wsparcie Przeładowywanie na gorąco.
  • Podczas korzystania z programu Visual Studio 2022 z aplikacją .NET 6+ większość scenariuszy jest obsługiwana. Ta obsługa nie jest ograniczona do nowej funkcji "brak debugera" wymienionej wcześniej. Obejmuje również inne nowe funkcje, takie jak obsługa ponownego ładowania projektów Blazor na gorąco i, ogólnie rzecz biorąc, edytowanie plików Razor w dowolnych aplikacjach ASP.NET Core i Przeładowywanie na gorąco CSS. Korzystanie z Visual Studio 2022 i aplikacji przeznaczonych dla .NET 6 zapewnia najbardziej zaawansowane środowisko Przeładowywanie na gorąco.

W poniższej tabeli przedstawiono minimalną wersję .NET wymaganą do obsługi .NET Przeładowywanie na gorąco z dołączonym debugerem (F5) i bez dołączonego debugera (Ctrl+F5) na podstawie typu projektu. wymagana jest Visual Studio 2022 w wersji 17.8 lub nowszej.

Typ aplikacji F5 Ctrl+F5 Wsparcie MetadataUpdateHandler
Konsola .NET 6 .NET 6
Uruchamianie w systemie Linux/macOS
(Docker i WSL)
.NET 8 .NET 6 .NET 8
Uruchamianie na Arm64 .NET 7 .NET 7 .NET 7
WPF .NET 6 .NET 6
WinForms .NET 6 .NET 6
ASP.NET .NET 6 .NET 6
Blazor Server .NET 6 .NET 6 .NET 6
Blazor WebAssembly .NET 6 .NET 6 .NET 6
MAUI
(WinUI/Android/iOS)
.NET 6 -- --

Typy typy edycji, które można wprowadzić za pomocą Przeładowywanie na gorąco są określane przez środowisko uruchomieniowe i wersję kompilatora, a nie przez metodę użytą do uruchomienia aplikacji (F5 lub Ctrl+F5).

W poniższych sekcjach podano dodatkowe szczegóły.

Obsługa aplikacji platformy .NET

W przypadku korzystania z Visual Studio 2022 i uruchamiania aplikacji przy użyciu debugera podstawowe środowisko Przeładowywanie na gorąco współpracuje z większością typów aplikacji .NET i wersji platformy. Ta obsługa obejmuje .NET Framework, .NET Core i .NET 5+ (zarówno dla języka C#, jak i Visual Basic zgodnie z zastosowaniem). Oczekiwanie w tym scenariuszu polega na tym, że jeśli używasz debugera, załóżmy, że Przeładowywanie na gorąco jest dla Ciebie dostępny i spróbuj!

Obsługa aplikacji C++

Podczas korzystania z Visual Studio 2022 i uruchamiania aplikacji za pomocą debugera, można przeładować na gorąco natywną aplikację C++ podczas działania w debugerze (F5) przy użyciu przycisku Przeładowywanie na gorąco. Przeładowywanie na gorąco jest również obsługiwana w przypadku aplikacji utworzonych przy użyciu projektów CMake i OpenFolder.

Aby projekt obsługiwał Przeładowywanie na gorąco, potrzebne są następujące opcje:

  • Project > Properties > C/C++ > General >Format informacji debugowania musi być ustawiony na wartość "Baza Danych Programu dla Edycji i Kontynuacji /ZI"
  • Project Properties Konsolidator Ogólne Włącz konsolidację przyrostową musi być ustawione na wartość "Tak "

Aby zapoznać się z obsługiwanymi zmianami w kodzie, sprawdź Obsługiwane Zmiany Kodu C++.

Visual Studio 2022 z aplikacją .NET lub .NET Framework podczas korzystania z debugera

W przypadku korzystania z Visual Studio 2022 i uruchamiania aplikacji z debugerem Przeładowywanie na gorąco współpracuje z większością struktur aplikacji.

W dowolnym miejscu, gdzie masz .NET i używasz debugera zarządzanego Visual Studio, powinna być dostępna podstawowa obsługa funkcji Przeładowywanie na gorąco. Oznacza to, że nawet projekty, takie jak Azure Functions, działają świetnie w tym scenariuszu.

Uwaga

Domyślnie niektóre projekty używają debugowania w trybie mieszanym, które nie obsługuje Przeładowywanie na gorąco. To ustawienie można zmodyfikować w ustawieniach project, ustawiając Project > Właściwości > Debugowanie > Otwórz interfejs użytkownika profilów uruchamiania debugowania > Włącz debugowanie kodu natywnego na wartość false.

Visual Studio 2022 z aplikacją .NET, ale nie przy użyciu debugera

Przeładowywanie na gorąco jest dostępny bez debuggera dla większości typów aplikacji .NET 6 lub nowszych.

Ta funkcja jest przeznaczona wyłącznie do .NET 6 lub nowszych. Te aplikacje, które nie są przeznaczone dla .NET 6 lub nowszych (czyli docelowo .NET 5 lub starszych), nie obsługują scenariusza „brak debugera” i muszą używać debugera, aby uzyskać dostęp do funkcji Przeładowywanie na gorąco.

Ponadto nie wszystkie typy projektów obsługują obecnie scenariusz "brak debugera", zobacz Support for .NET applications.

Visual Studio 2022 r. z aplikacją .NET 6+

Jeśli używasz zarówno Visual Studio 2022, jak i pracujesz nad aplikacjami przeznaczonymi dla .NET 6 lub nowszych, uzyskasz korzyści z najbardziej dopracowanego i zdolnego środowiska Przeładowywanie na gorąco.

Obsługiwane w tym scenariuszu:

  • Aplikacje platformy Blazor (serwer i zestaw WebAssembly)
  • Edytowanie plików Razor zarówno na platformie Blazor, jak i w zwykłych witrynach internetowych ASP.NET Core
  • CSS szybkie przeładowanie
  • XAML Przeładowywanie na gorąco
  • Wsparcie dla Przeładowywanie na gorąco przy uruchamianiu aplikacji bez debugera (zgodnie z wcześniejszym opisem)

Jeśli korzystasz z .NET 6+, w dalszym ciągu otrzymujesz ulepszenia w nadchodzących aktualizacjach Visual Studio 2022 oraz w nowych wersjach grupy funkcjonalności i głównych wydaniach .NET.

Obsługiwane scenariusze ASP.NET Core

Podstawowa funkcjonalność Przeładowywanie na gorąco jest obsługiwana w wielu scenariuszach ASP.NET. Najbardziej dostępną funkcją jest możliwość modyfikacji code-behind i innych plików klas .NET dla większości typów aplikacji internetowych. Ta funkcja działa podczas pracy z debugerem Visual Studio i jest dostępna wszędzie tam, gdzie wcześniej dostępne było Przeładowywanie na gorąco. Aby uzyskać bardziej szczegółowe wskazówki, zobacz obsługę .NET Przeładowywanie na gorąco dla ASP.NET Core.

Dla deweloperów ASP.NET Core, którzy celują w .NET 6 lub nowsze, dostępne są dodatkowe możliwości, których nie ma w niższych wersjach .NET. Te możliwości obejmują:

  • CSHTML: Plik Razor CSHTML obsługuje wiele rodzajów edycji.
  • Odświeżanie przeglądarki: Edytowanie pliku Razor automatycznie odświeża zmiany w przeglądarce internetowej podczas debugowania. Ta funkcja była wcześniej dostępna tylko podczas uruchamiania aplikacji bez debugera.
  • CSS Przeładowywanie na gorąco: Możesz zmienić pliki CSS podczas działania aplikacji, a zmiany są stosowane natychmiast do uruchomionej aplikacji podczas wpisywania.
  • No Debugger: Otrzymujesz wsparcie Przeładowywanie na gorąco, gdy używasz Visual Studio do uruchamiania aplikacji internetowej bez debugera (CTRL-F5).

Obsługiwane zmiany .NET

Środowisko .NET Przeładowywanie na gorąco jest obsługiwane przez debugger i kompilator języka C# (Roslyn). Roslyn wspiera edycje i Obsługiwane zmiany w kodzie (C# i VB) wyświetlają listę typów edycji obecnie obsługiwanych i potencjalnych przyszłych ulepszeń.

Obsługiwane zmiany struktury .NET

Środowisko .NET Przeładowywanie na gorąco jest obsługiwane przez kompilator debugger i C#. Obsługiwane zmiany kodu (C# i VB) zawierają listę typów edycji, które są obecnie obsługiwane i potencjalne przyszłe ulepszenia.

Nieobsługiwane projekty .NET i .NET Framework

Przeładowywanie na gorąco nie jest dostępna w niektórych konfiguracjach projektu:

  • Jeśli używasz Visual Studio bez debugera, Przeładowywanie na gorąco działa tylko dla aplikacji .NET przeznaczonych dla .NET 6 lub nowszych.
  • Jeśli używasz debugera Visual Studio do uruchamiania aplikacji, ale wyłączono Enable Przeładowywanie na gorąco and Edit and Continue when debugging w ustawieniach, Przeładowywanie na gorąco nie jest obsługiwana.
  • Konfiguracje "Release" lub niestandardowe nie są obsługiwane. Projekt musi używać konfiguracji kompilacji Debug.
  • Jeśli tworzysz projekt w F# lub projekt .NET Native.
  • Niektóre optymalizacje uruchamiania lub kompilacji nie są obsługiwane w .NET Przeładowywanie na gorąco. Jeśli na przykład profil debugowania projektu jest skonfigurowany w następujący sposób, .NET Przeładowywanie na gorąco nie jest obsługiwana:
    • Przycinanie jest włączone dla Twojego projektu. Na przykład nie jest obsługiwane, jeśli PublishTrimmed jest ustawiona na wartość True w pliku projektu dla profilu debugowania.
    • ReadyToRun jest włączona dla projektu. Na przykład nie jest obsługiwane, jeśli PublishReadyToRun jest ustawiona na wartość True w pliku projektu dla profilu debugowania.

Aby uzyskać więcej informacji, zobacz Nieobsługiwane scenariusze.

Przeładowywanie na gorąco nie jest obsługiwany dla języka F#

Przeładowywanie na gorąco lub Edit and Continue nie są obsługiwane podczas debugowania kodu w języku F#. Edycje kodu F# są możliwe podczas sesji debugowania, ale należy unikać. Zmiany kodu nie są stosowane podczas sesji debugowania. W związku z tym wszelkie zmiany wprowadzone w kodzie języka F# podczas debugowania spowodują, że kod źródłowy nie będzie zgodny z kodem poddawanym debugowaniu.

Konfigurowanie Przeładowywanie na gorąco

Aby włączyć, wyłączyć lub skonfigurować Przeładowywanie na gorąco, zobacz Konfigurowanie edycji i kontynuowania.

Komunikat ostrzegawczy

Jeśli zostanie wyświetlone następujące okno dialogowe, Przeładowywanie na gorąco nie może zastosować bieżących edycji bez ponownego uruchamiania. Możesz ponownie skompilować aplikację i zastosować zmiany (ponownie uruchomić) lub kontynuować edycję. W przypadku ponownej kompilacji cały stan aplikacji zostanie utracony. Jeśli będziesz kontynuować edycję, możliwe jest, że dodatkowe zmiany lub poprawki mogą sprawić, że funkcja Przeładowywanie na gorąco zacznie ponownie działać.

Zrzut ekranu przedstawiający okno dialogowe Stosowanie zmian.

Zrzut ekranu przedstawiający okno dialogowe Stosowanie zmian.

Jeśli wybierzesz opcję Always rebuild when changes can't be applied w oknie dialogowym, nie zobaczysz tego okna dialogowego ponownie w bieżącej sesji Visual Studio, a Visual Studio automatycznie odbuduje i przeładuje zamiast wyświetlać okno dialogowe.

Rozwiązywanie problemów

Jeśli Przeładowywanie na gorąco nie działa zgodnie z oczekiwaniami, sprawdź następujące kwestie:

  • Sprawdź, czy używasz obsługiwanej aplikacji i scenariusza. Niektóre typy projektów, debugowanie w trybie mieszanym, zoptymalizowany kod oraz scenariusze Dołącz do procesu nie obsługują Przeładowywanie na gorąco. Aby uzyskać więcej informacji, zobacz Nieobsługiwane scenariusze.
  • Upewnij się, że aplikacja używa konfiguracji Debug i że Przeładowywanie na gorąco jest włączona w Tools>Options>Debugging>.NET/C++ Przeładowywanie na gorąco.
  • Ustaw Logging Verbosity na Detailed lub Diagnostic aby uzyskać więcej informacji w danych wyjściowych Przeładowywanie na gorąco.
  • Otwórz okno Output i w Pokaż dane wyjściowe z wybierz pozycję Przeładowywanie na gorąco aby przejrzeć komunikaty diagnostyczne.
  • Jeśli wiersz jest wyświetlany tylko do odczytu podczas debugowania, może to być aktywna instrukcja w stosie wywołań lub edycja może wymagać ponownego uruchomienia.

Aby uzyskać listę typowych diagnostyk, zobacz Przeładowywanie na gorąco i Edytuj i kontynuuj komunikaty o błędach. Jeśli problem będzie się powtarzać, a dane wyjściowe nie pokazują wyraźnej przyczyny, użyj polecenia Raportuj problem aby wysłać opinię do zespołu Visual Studio.

Jeśli używasz kompresji odpowiedzi na platformie .NET Core, zapoznaj się z informacjami na temat kompresji response.