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

適用于:是Visual Studio否Visual Studio for Mac否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

    [熱重新載入] 按鈕的螢幕擷取畫面。

支援的 .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 熱重新載入。 同時使用以 .NET 6 為目標的 Visual Studio 2022 和應用程式,可提供最強大的熱重新載入體驗。

下表顯示哪些應用程式類型支援 .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 專案建置的應用程式。

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

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

使用 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 17.1 版 Preview 1 開始,支援 .NET MAUI 應用程式。

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

以大部分 .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 應用程式。

Visual Studio 2022 搭配 .NET 6 應用程式

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

在此案例中支援:

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

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

注意

在 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 熱重新載入體驗是由Edit and Continue機制和 Roslyn 所提供。 支援的編輯會 列出 Roslyn 目前支援的編輯類型,以及未來可能的增強功能。

不支援的 .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 熱重新載入正常運作。

設定熱重新載入

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

設定熱重新載入的螢幕擷取畫面

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

熱重新載入的設定包括:

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

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

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

.NET 熱重新載入設定的螢幕擷取畫面

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

範例:

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

警告訊息

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

[套用變更] 對話方塊的螢幕擷取畫面

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

注意

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

疑難排解

如需 ASP.NET Core,如果您使用回應壓縮,請參閱 中的 dotnet watch回應壓縮相關資訊。

另請參閱

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