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

Począwszy od programu Visual Studio 2022, środowisko Przeładowywanie na gorąco w programie Visual Studio działa zarówno dla zarządzanych aplikacji .NET, jak i natywnych dla języka C++. Niezależnie od typu aplikacji, nad którą pracujesz, intencją Przeładowywanie na gorąco jest zapisanie jak największej liczby ponownych uruchomień aplikacji między edycjami, co pozwala zwiększyć produktywność, skracając czas oczekiwania na ponowne skompilowanie, ponowne uruchomienie, ponowne przejście do poprzedniej lokalizacji, w której znajdowało się w samej aplikacji, itd.

Robimy to, umożliwiając edytowanie plików kodu aplikacji i stosowanie zmian kodu natychmiast 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 Aplikacje obsługiwane przez platformy .NET i C++ .

  2. Uruchom aplikację z dołączonym debugerem przy użyciu klawisza F5 lub, jeśli jest obsługiwany, Ctrl+F5.

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

  4. Zastosuj zmiany kodu przy użyciu przycisku Przeładowywanie na gorąco lub naciśnij klawisze ALT+F10.

    Screenshot of the Hot Reload button.

Aby zobaczyć zmiany w interfejsie użytkownika, należy ponownie wykonać kod. Na przykład kod za przyciskiem musi zostać ponownie wykonany lub kod, który jest wyzwalany w odstępie czasu. W innym przykładzie ASP.NET Core obsługuje automatyczne odświeżanie przeglądarki z powodu funkcji MetadataUpdateHandler .

Obsługa aplikacji .NET

  • W przypadku korzystania z programu Visual Studio 2022 i uruchamiania aplikacji z debugerem podstawowe środowisko Przeładowywanie na gorąco działa z większością typów aplikacji i wersji platformy .NET. Dotyczy to programów .NET Framework, .NET Core i .NET 5+ (zarówno dla języków C#, jak i Visual Basic). 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 programu Visual Studio 2022, ale nie przy użyciu debugera (na przykład przy użyciu klawiszy CTRL-F5 do uruchamiania aplikacji), Przeładowywanie na gorąco jest dostępny podczas określania wartości docelowych dla większości typów aplikacji platformy .NET 6. Oznacza to, że aplikacje, które nie są przeznaczone dla platformy .NET 6 (.NET 5 lub nowszej), nie obsługują scenariusza "brak debugera" i muszą korzystać z debugera w celu uzyskania obsługi Przeładowywanie na gorąco.
  • W przypadku korzystania z programu Visual Studio 2022 z aplikacją .NET 6 większość scenariuszy jest obsługiwana. Nie jest to ograniczone do nowej funkcji "brak debugera" wymienionej powyżej. 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 programu Visual Studio 2022 i aplikacji przeznaczonych dla platformy .NET 6 zapewni najbardziej zaawansowane środowisko Przeładowywanie na gorąco.

W poniższej tabeli pokazano, które projekty obsługują Przeładowywanie na gorąco .NET z dołączonym debugerem (F5) i bez dołączonego debugera (Ctrl+F5), zgodnie z minimalną wersją platformy .NET wymaganą do obsługi w programie Visual Studio 2022 (17.8).

Typ aplikacji F5 Ctrl+F5 MetadataUpdateHandler Wsparcie
Konsola .NET 6 .NET 6
Uruchamianie w systemie Linux/macOS
(Docker i WSL)
.NET 8 .NET 6 .NET 8
Uruchamianie w usłudze 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
Zestaw WebAssembly Blazor .NET 6 .NET 6 .NET 6
MAUI
(WinUI/Android/iOS)
.NET 6 -- --

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 rozszerzymy powyższe podsumowanie i poznamy więcej szczegółów.

Obsługa aplikacji C++

W przypadku korzystania z programu Visual Studio 2022 i uruchamiania aplikacji za pomocą debugera możesz załadować ponownie natywną aplikację języka C++ podczas uruchamiania 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 będą następujące elementy:

  • Właściwości projektu > C/C++ > — ogólny >format informacji debugowania musi być ustawiony na wartość "Program Database for Edit and Continue" (Program Database for Edit and Continue/ZI)>
  • Konsolidator właściwości projektu — ogólne> włączanie łączenia przyrostowego musi mieć wartość "Tak/INCREMENTAL">>>

Aby uzyskać informacje o obsługiwanych edycjach, zobacz C++ Supported Code Changes (Obsługiwane zmiany kodu w języku C++).

Program Visual Studio 2022 z aplikacją .NET podczas korzystania z debugera

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

W dowolnym miejscu, w którym masz platformę .NET i korzystasz z debugera zarządzanego programu Visual Studio, musisz uzyskać podstawową pomoc techniczną Przeładowywanie na gorąco. Oznacza to, że nawet projekty, takie jak Azure Functions, działają świetnie w tym scenariuszu.

Uwaga

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

Program Visual Studio 2022 z aplikacją .NET, ale nie korzysta z debugera

Przeładowywanie na gorąco jest dostępny bez debugera w przypadku określania wartości docelowych dla większości typów aplikacji platformy .NET 6+.

Ta funkcja jest dostępna wyłącznie dla platformy .NET 6+. Te aplikacje, które nie są przeznaczone dla platformy .NET 6+ (czyli .NET 5 lub nowszej), nie będą obsługiwać scenariusza "brak debugera" i muszą używać debugera, aby uzyskać dostęp do Przeładowywanie na gorąco funkcji.

Należy również pamiętać, że nie wszystkie typy projektów obsługują obecnie scenariusz "brak debugera", zobacz Obsługa aplikacji platformy .NET.

Program Visual Studio 2022 z aplikacją .NET 6+

Jeśli korzystasz zarówno z programu Visual Studio 2022, jak i pracujesz nad aplikacjami przeznaczonymi dla platformy .NET 6+, 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 platformy ASP.NET Core
  • Przeładowywanie na gorąco CSS
  • Ponowne ładowanie przy aktywnym kodzie XAML
  • Przeładowywanie na gorąco obsługę uruchamiania aplikacji bez debugera (jak opisano wcześniej)

Jeśli docelowy jest program .NET 6+, będziesz nadal uzyskiwać ulepszenia w nadchodzących aktualizacjach programu Visual Studio 2022 i wersjach głównych platformy .NET.

Obsługiwane scenariusze ASP.NET Core

Podstawowe środowisko Przeładowywanie na gorąco jest obsługiwane w wielu scenariuszach ASP.NET. Najbardziej dostępną funkcją jest możliwość zmiany kodu i innych plików klas platformy .NET dla większości typów aplikacji internetowych. Ta funkcja działa podczas korzystania z debugera programu Visual Studio i jest dostępna w dowolnym miejscu, Przeładowywanie na gorąco była wcześniej dostępna. Aby uzyskać bardziej szczegółowe wskazówki, zobacz Obsługa platformy .NET Przeładowywanie na gorąco dla platformy ASP.NET Core.

W przypadku deweloperów platformy ASP.NET Core przeznaczonych dla platformy .NET 6 lub nowszej istnieją dodatkowe możliwości niedostępne dla niższych wersji platformy .NET. Dostępne są następujące możliwości:

  • CSHTML: Edytowanie pliku CSHTML Razor obsługuje wiele typó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.
  • Przeładowywanie na gorąco CSS: możesz zmienić pliki CSS podczas działania aplikacji, a zmiany są stosowane natychmiast do uruchomionej aplikacji podczas wpisywania.
  • Brak debugera: obsługa Przeładowywanie na gorąco podczas uruchamiania aplikacji internetowej przy użyciu programu Visual Studio bez debugera (CTRL-F5).

Obsługiwane zmiany platformy .NET

Środowisko Przeładowywanie na gorąco platformy .NET jest obsługiwane przez debuger i kompilator języka C# (Roslyn). Lista typów edycji obsługiwanych przez platformę Roslyn i obsługiwanych zmian kodu (C# i VB) zawiera listę typów obecnie obsługiwanych edycji i potencjalnych przyszłych ulepszeń.

Nieobsługiwane projekty platformy .NET

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

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

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

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. W przypadku kontynuowania edytowania możliwe jest, że dodatkowe zmiany lub poprawki mogą spowodować ponowne działanie Przeładowywanie na gorąco.

Screenshot of the apply changes dialog box

Jeśli w oknie dialogowym zostanie wybrana opcja Zawsze ponownie skompiluj zmiany , nie będzie można ponownie wyświetlić okna dialogowego w bieżącej sesji programu Visual Studio, a program Visual Studio automatycznie ponownie skompiluje i ponownie załaduje zamiast okna dialogowego.

Rozwiązywanie problemów

Zdecydowanie zaleca się sprawdzenie okna danych wyjściowych Przeładowywanie na gorąco w celu uzyskania szczegółowych informacji diagnostycznych dotyczących sesji Przeładowywanie na gorąco.

Jeśli używasz kompresji odpowiedzi na platformie .NET Core, zobacz informacje dotyczące kompresji odpowiedzi.