使用 Visual Studio (C#、Visual Basic、C++) 中的 熱重新載入 撰寫和執行程式碼並進行偵錯

適用于:yesnoVisual Studio Visual Studio for Mac no Visual Studio Code

從 Visual Studio 2022 開始,Visual Studio中的熱重新載入體驗適用于受控 .NET 和原生 C++ 應用程式。 無論您正在處理的應用程式類型為何,熱重新載入的目的是要盡可能在編輯之間儲存許多應用程式重新開機,藉由減少等待應用程式重建、重新開機、重新巡覽至應用程式本身先前位置的時間,讓您更有生產力。

我們藉由讓您編輯應用程式的程式碼檔案,並立即將程式碼變更套用至執行中的應用程式,也就是熱重新載入來完成此作業。 套用您的變更之後,請重新執行程式碼,方法是在應用程式本身 (或透過某種計時器執行動作,例如) 並立即查看變更;不需要透過中斷點暫停應用程式!

使用 熱重新載入 更新執行中的程式碼

  1. 根據支援的應用程式類型開啟專案。 如需 .NET 的詳細資訊,請參閱 .NET 應用程式支援

  2. 請確定已在偵錯工具設定或偵錯啟動設定檔中停用 [啟用機器碼 偵錯]。

  3. 使用F5附加的偵錯工具啟動應用程式,如果應用程式支援,則為 Ctrl+F5

  4. 開啟 C#、C++或Visual Basic程式碼檔案,其中某些程式碼可以透過執行中的應用程式使用者 (介面重新執行,例如,按鈕或 viewmodel 命令的程式碼後置) 或透過計時器以間隔觸發的專案,並變更程式碼。

  5. 使用[熱重新載入] 按鈕套用程式碼變更,或按ALT+F10

    Screenshot of the Hot Reload button.

支援的 .NET 應用程式架構和案例

  • 使用 Visual Studio 2022 並使用偵錯工具啟動您的應用程式時,基本熱重新載入體驗適用于大部分類型的 .NET 應用程式和架構版本。 這項支援包括適用于 C# 和 Visual Basic) 的 .NET Framework、.NET Core 和 .NET 5+ (。 支援的應用程式類型包括 Web (程式碼後置變更,) 、桌面、行動、雲端和其他專案類型。 在此案例中預期,如果您使用偵錯工具,請假設有熱重新載入可供您使用,並試試看!
  • 使用 Visual Studio 2022 但未使用偵錯工具 (例如使用 CTRL-F5 啟動應用程式) 時,即使以大部分類型的 .NET 6 應用程式為目標,仍可使用熱重新載入。 這表示不是以 .NET 6 (.NET 5 或更新版本為目標的應用程式,) 不支援「無偵錯工具」案例,而且必須使用偵錯工具來取得熱重新載入支援。
  • 搭配 .NET 6 應用程式使用 Visual Studio 2022 時,最多支援案例。 這不限於上述新的「無偵錯工具」功能。 它也包含其他新功能,例如支援經常性重載 Blazor 專案,以及更普遍地,在任何 ASP.NET Core應用程式中編輯 Razor 檔案,以及 CSS 熱重新載入。 同時使用Visual Studio 2022 和以 .NET 6 為目標的應用程式,可讓您擁有最強大的熱重新載入體驗。

下表顯示哪些應用程式類型支援 .NET 熱重新載入搭配附加的偵錯工具 (F5) ,且未附加偵錯工具 (Ctrl+F5) ,以及 .NET 6 是否為最低支援 (,也就是 F5) 。 Ctrl+F5 支援一律需要 .NET 6。 另顯示是支援此功能的最小Visual Studio版本。

應用程式類型 需要 .NET 6 F5 Ctrl+F5
ASP.NET 程式碼後置 16.11 17.0
ASP.NET Razor (Blazor Server 和 ASP.NET Core) 17.0 17.0
ASP.NET Razor (Blazor WASM) 17.1 17.0
WPF 16.11 17.0
WinUI3 16.11 --
WinForms 16.11 17.0
主控台 16.11 17.0
.NET MAUI (WinUI 3) 17.1 --
.NET MAUI (Android) 17.1 --
.NET MAUI (iOS) 17.1 --
.NET MAUI Blazor 混合式 (WinUI 3) 17.1 --
.NET MAUI Blazor 混合式 (Android) 17.1 --
.NET MAUI Blazor 混合式 (iOS) 17.1 --

您可以使用 熱重新載入 所做的編輯類型取決於執行時間,而不是您用來啟動應用程式的方法, (F5 或 Ctrl+F5) 。

在下列各節中,我們將展開上述摘要,並深入探討更多詳細資料。

支援 C++ 應用程式

使用 Visual Studio 2022 並使用偵錯工具啟動您的應用程式時,您可以使用[熱重新載入] 按鈕,在偵錯工具下執行時,熱重載原生 C++ 應用程式 (F5) 。 熱重新載入也支援使用 CMake 和 OpenFolder 專案建置的應用程式。

此體驗由原生編輯和繼續提供。 如需支援的編輯,請參閱 編輯後繼續

使用偵錯工具時,使用 .NET 應用程式Visual Studio 2022

使用 Visual Studio 2022 並使用偵錯工具啟動應用程式時,熱重新載入適用于大部分的應用程式架構,包括主控台、Windows Forms (WinForms) 、WPF、UWP、WinUI 3 (請參閱附注) ,以及大部分 ASP.NET Web 專案類型, (程式碼後置編輯) 包括 ASP.NET MVC、Web API,甚至是較舊的Web Form專案。 這些是範例。 在擁有 .NET 且您使用Visual Studio受控偵錯工具的任何位置,您應該取得基本熱重新載入支援。 此事實表示即使是這類專案,Azure Functions在此案例中也非常適合使用。

注意

根據預設,WinUI 3 會使用不支援熱重新載入的混合模式偵錯。 您可以在專案設定中修改此功能,方法是啟用 Managed 偵錯工具,讓熱重新載入正常運作。 若要在您的專案中啟用此功能,請修改 launchSettings.json,並在 屬性之後 commandName 新增 "nativeDebugging": false

從 Visual Studio 2022 2022 17.1 版 Preview 1 開始,支援 .NET MAUI 應用程式。

使用 .NET 應用程式Visual Studio 2022,但不使用偵錯工具

以大部分 .NET 6 應用程式類型為目標時,熱重新載入可以使用偵錯工具,包括主控台、WPF、Windows Forms (WinForms) 、ASP.NET Core MVC、Web API 和 Blazor 等專案類型。

這項功能專屬於 .NET 6+。 這些應用程式的目標不是 .NET 6 (.NET 5 或更新版本,) 不支援「無偵錯工具」案例,而且必須使用偵錯工具來存取熱重新載入功能。

此外,請注意,並非所有專案類型目前都支援「無偵錯工具」案例。 具體來說:

  • 在沒有偵錯工具的情況下,不支援熱重新載入 UWP 應用程式。 這是設計方式,而且目前沒有改善此計畫。
  • 以 iOS 和 Android 為目標的 Xamarin.Forms 應用程式不支援 .NET 熱重新載入 (,不論您是否使用或不使用偵錯工具啟動應用程式) ,但仍會繼續支援 XAML 熱重新載入。
  • 只有偵錯工具才支援 .NET MAUI 應用程式。

使用 .NET 6 應用程式Visual Studio 2022

如果您使用 Visual Studio 2022,並處理以 .NET 6 為目標的應用程式,您會獲得最完美且具備熱重新載入體驗的優點。

在此案例中支援:

  • Blazor 應用程式 (伺服器和 WebAssembly (請參閱附注) )
  • 在 Blazor 和一般 ASP.NET Core網站中編輯 Razor 檔案
  • CSS 熱重新載入
  • 在沒有偵錯工具的情況下執行應用程式時熱重新載入支援 (,如先前所述)

如果您以 .NET 6 為目標,您可以繼續改善即將推出的 Visual Studio 2022 更新和 .NET 功能範圍和主要版本。

注意

在 2022 Visual Studio 2022 (17.0 版) 的第一個版本中,熱重新載入目前未啟用 Visual Studio 偵錯工具時,支援 Blazor WebAssembly,但可從 17.1 開始提供。 如果您透過沒有偵錯工具或更新為 17.1 版的Visual Studio啟動應用程式,您仍然可以取得熱重新載入。

支援的 ASP.NET Core案例

許多 ASP.NET 案例都支援基本熱重新載入體驗。 最廣泛的可用功能是變更大部分 Web 應用程式類型之程式碼後置和其他 .NET 類別檔案的能力。 這項功能可在使用Visual Studio偵錯工具時運作,而且目前位於先前可用的 [編輯後繼續] 位置。 如需更明確的指引,請參閱.NET 熱重新載入支援 ASP.NET Core

對於以 .NET 6 為目標的 ASP.NET Core開發人員,有些其他功能不適用於較低版本的 .NET。 這些功能包括:

  • CSHTML: 編輯 Razor CSHTML 檔案支援許多類型的編輯。
  • 瀏覽器重新整理: 編輯 razor 檔案會在偵錯時自動重新整理網頁瀏覽器中的變更。 此功能先前只有在不使用偵錯工具的情況下啟動應用程式時才可使用。
  • CSS 熱重新載入:您可以在應用程式執行時變更 CSS 檔案,並在輸入時立即將變更套用至執行中的應用程式。
  • 無偵錯工具:使用 Visual Studio 在沒有偵錯工具的情況下啟動 Web 應用程式時,熱重新載入支援 (CTRL-F5) 。

支援的 .NET 編輯

.NET 熱重新載入體驗是由[編輯後繼續] 機制所提供。 改善包括支援其他類型的編輯,這些編輯類型超出舊版Visual Studio原本可能的功能。 改善項目包括:

  • 新增、更新或刪除自訂屬性
  • 新增或更新記錄結構
  • 新增或更新#line指示詞
  • 編輯 Switch 運算式
  • 使用 #line 指示詞編輯檔案,包括指示詞本身的變更
  • 編輯最上層語句
  • 編輯使用任何新的 C# 10 功能的程式碼,例如全域 using 指示詞、檔案範圍命名空間、改善的 Lambda 和無參數結構建構函式
  • 重新命名 Lambda 參數
  • 重新命名現有方法的參數

上述改進功能適用于熱重新載入和 [編輯後繼續] 體驗。

不支援的 .NET 案例

不支援的案例:

  • Xamarin.Forms 應用程式在iOS和Android案例中不支援 .NET 熱重新載入。 在以 UWP app 為目標時,您會取得熱重新載入的部分支援。 這是設計方式,我們不預期會進一步改善。 (附注:XAML 熱重新載入將繼續在最新的 SDK.) 上,為 Xamarin.Forms 客戶提供和支援
  • Visual Studio 2022 17.1 版 Preview 1 之前,不支援 .NET MAUI 應用程式。 從 17.1 Preview 1 開始,支援 .NET MAUI,但僅附加偵錯工具。
  • 使用 F# 或目標.NET Native建置的應用程式不支援熱重新載入。

如果您使用Visual Studio而不使用偵錯工具。 NET 熱重新載入僅適用于以 .NET 6 為目標的應用程式。

此外,某些專案組態無法使用熱重新載入:

  • 如果您使用Visual Studio偵錯工具來執行您的應用程式,但已在設定中停用 Edit and Continue ,則不支援熱重新載入。
  • 不支援發行或自訂群組建組態。 您的專案必須使用偵錯組建組態。
  • .NET 熱重新載入不支援某些啟動或編譯優化。 例如,如果您的專案的偵錯設定檔是以下列方式設定,則不支援 .NET 熱重新載入:
    • 為您的專案啟用修剪。 例如,如果在 PublishTrimmed 偵錯設定檔的專案檔中設定為 True,則不支援它。
    • 已為您的專案啟用ReadyToRun。 例如,如果在 PublishReadyToRun 偵錯設定檔的專案檔中設定為 True,則不支援它。
  • 針對 WinUI 3 應用程式,原生程式碼偵錯預設會啟用 (即使LaunchSettings.json) 中沒有設定,而且以這種方式執行混合模式偵錯時不支援 .NET 熱重新載入。 基於這個理由,您必須將明確設定 nativeDebugging: false 新增至LaunchSettings.json,才能讓 .NET 熱重新載入正常運作。

設定熱重新載入

您可以從 [熱重新載入] 下拉式按鈕選取[設定],以設定熱重新載入

Screenshot of configuring Hot Reload

或者,開啟[工具>選項>> 錯.NET/C++] 熱重新載入

熱重新載入的設定包括:

  • 在偵錯時啟用熱重新載入和 [編輯後繼續]。 從附加的偵錯工具 (F5) 開始時,啟用熱重新載入。

  • 在啟動但不偵錯時啟用熱重新載入。 在未附加偵錯工具的情況下啟動時啟用熱重新載入 (Ctrl+F5) 。

  • 在 [盤案儲存] 上套用熱重新載入。 當您儲存檔案時,套用程式碼變更。

Screenshot of settings for .NET Hot Reload

您也可以修改 .NET 6 專案 launchSetting.json 並將 設定 hotReloadEnabledfalse 為 ,來控制專案層級是否提供 .NET 熱重新載入。

範例:

{
  "profiles": {
    "Console": {
      "commandName": "Project",
      "hotReloadEnabled": false
    }
  }
}

警告訊息

如果您看到下列對話方塊,熱重新載入無法在不重新開機的情況下套用目前的編輯。 您可以選擇重建應用程式並套用變更, (重新開機) 或繼續編輯。 如果您重建,所有應用程式狀態都會遺失。 如果您繼續編輯,可能會造成其他變更或更正再次運作熱重新載入。

Screenshot of the apply changes dialog box

如果您在對話方塊中選取[永遠重建] 選項,就不會在目前的Visual Studio會話中再次看到對話方塊,而Visual Studio會自動重建並重載,而不是顯示對話方塊。

注意

在Visual Studio (17.0 版的第一個版本中,) 搭配偵錯工具使用熱重新載入時,仍會顯示標準 [編輯後繼續] 對話方塊。 這是錯誤,自 17.1 Preview 2 版本開始已解決。

另請參閱

編輯和繼續 (Visual C#) 編輯後繼續 (C++)