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

從 Visual Studio 2022 開始,Visual Studio 中的熱重新載入體驗適用於受控 .NET 和原生 C++ 應用程式。 無論您正在處理的應用程式類型為何,熱重新載入的用意是盡可能讓您節省編輯之間重新啟動應用程式的次數,透過減少您等候應用程式重建、重新啟動、重新瀏覽至應用程式本身先前的位置等等,讓您更具有生產力。

我們讓您能夠編輯應用程式的程式碼檔案,並立即將程式碼變更套用至執行中應用程式 (也稱為「熱重新載入」),以達成此目的。 套用您的變更之後,在應用程式本身採取動作 (或透過某種計時器等等) 來重新執行程式碼,就會立即看到變更;不需要透過中斷點來暫停應用程式!

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

  1. 根據支援的應用程式類型來開啟專案。 請參閱 .NETC++ 支援的應用程式。

  2. 使用 F5 或,如果支援Ctrl+F5 啟動附加了偵錯工具的應用程式。

  3. 開啟程式碼檔案並變更程式碼。

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

    Screenshot of the Hot Reload button.

若要查看使用者介面中的變更,必須重新執行程式碼。 例如,必須重新執行按鈕的程式碼後置,或透過計時器按時間間隔觸發程式碼。 另一個範例是,ASP.NET Core 支援因為 MetadataUpdateHandler 功能而自動重新整理瀏覽器。

支援 .NET 應用程式

  • 使用 Visual Studio 2022 並使用偵錯工具啟動應用程式時,基本熱重新載入體驗適用於大部分類型的 .NET 應用程式和架構版本。 這包括 .NET Framework、.NET Core 和 .NET 5+ (如適用,包括 C# 和 Visual Basic)。 此案例中的期望是,如果您要使用偵錯工具,則假設熱重新載入可供您使用,並且嘗試使用!
  • 使用 Visual Studio 2022 但不使用偵錯工具 (例如,使用 CTRL-F5 啟動應用程式) 時,「熱重新載入」在以大多數類型的 .NET 6 應用程式為目標時適用。 這表示未以 .NET 6 (.NET 5 或以下版本) 為目標的應用程式不支援「無偵錯工具」案例,而且必須使用偵錯工具來取得熱重新載入支援。
  • 將 Visual Studio 2022 與 .NET 6 應用程式配合使用時,支援大多數案例。 這不限於上述新的「無偵錯工具」功能。 其也包括其他新功能,例如支援熱重新載入 Blazor 專案,以及更普遍地在任何 ASP.NET Core 應用程式和 CSS 熱重新載入中編輯 Razor 檔案。 在使用 Visual Studio 2022 並針對 .NET 6 的應用程式時,將會獲得最強大的「熱重新載入」體驗。

以下資料表顯示了哪些專案支援附加了偵錯工具 (F5) 和未附加偵錯工具 (Ctrl+F5) 的 .NET 熱重新載入,具體取決於 Visual Studio 中支援所需的最低 .NET 版本 2022 (17.8)。

應用程式類型 F5 Ctrl+F5 MetadataUpdateHandler 支援
主控台 .NET 6 .NET 6
在 Linux/macOS 上執行
(Docker 和 WSL)
.NET 8 .NET 6 .NET 8
在 Arm64 上執行 .NET 7 .NET 7 .NET 7
WPF .NET 6 .NET 6
WinForms .NET 6 .NET 6
ASP.NET .NET 6 .NET 6
Blazor 伺服器 .NET 6 .NET 6 .NET 6
Blazor WebAssembly .NET 6 .NET 6 .NET 6
MAUI
(WinUI/Android/iOS)
.NET 6 -- --

可以使用「熱重新載入」編輯的類型,取決於執行階段和編譯器版本,而非用於啟動應用程式的方法 (F5 或 Ctrl+F5)。

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

支援 C++ 應用程式

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

為了讓專案支援「熱重新載入」,您將需要:

  • 專案>屬性> C/C++ >一般>偵錯資訊格式必須設定為「編輯後繼續的程式資料庫/ZI
  • 專案>屬性>連結器>一般>啟用累加連結必須設定為「是/INCREMENTAL

如需支援的編輯,請參閱 C++ 支援的程式碼變更

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

使用 Visual Studio 2022 並使用偵錯工具啟動應用程式時,「熱重新載入」適用於大多數應用程式框架。

在您擁有 .NET 且正在使用 Visual Studio 受控偵錯工具的任何位置,您都應該獲得基本熱重新載入支援。 此事實表示即使是 Azure Functions 這類專案,在此案例中也能運作正常。

注意

某些專案預設使用混合模式偵錯,不支援「熱重新載入」。 藉由將專案>屬性>偵錯>開啟偵錯啟動設定檔 UI> 啟用機器碼偵錯設定為 false,即可在專案設定中修改。

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

當以大多數 .NET 6+ 應用程式類型為目標時,即使沒有偵錯工具也適用「熱重新載入」。

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

另請注意,目前並非所有專案類型都支援「無偵錯工具」案例,請參閱支援 .NET 應用程式

具有 .NET 6+ 應用程式的 Visual Studio 2022

如果同時使用 Visual Studio 2022 並處理以 .NET 6+ 為目標的應用程式,可以獲得最完善和功能最強大的「熱重新載入」體驗。

在此案例中支援:

  • Blazor 應用程式 (Server and WebAssembly)
  • 在 Blazor 和一般 ASP.NET Core 網站中編輯 Razor 檔案
  • CSS 熱重新載入
  • XAML 熱重載
  • 在沒有偵錯工具的情況下執行應用程式時的熱重新載入支援 (如先前所詳述)

如果以 .NET 6+ 為目標,則在即將推出的 Visual Studio 2022 更新和 .NET 功能帶和主要版本中將繼續獲得改進。

支援的 ASP.NET Core 案例

許多 ASP.NET 案例都支援基本熱重新載入體驗。 最廣泛使用的功能是變更大部分 Web 應用程式類型的程式碼後置和其他 .NET 類別檔案的功能。 此功能在使用 Visual Studio 偵錯工具時運作,並且存在於以前可用的任何「熱重新載入」中。 如需更具體的指引,請參閱 ASP.NET Core 的 .NET 熱重新載入支援

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

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

支援的 .NET 變更

.NET 熱重新載入體驗是由偵錯工具和 C# 編譯器 (Roslyn) 提供。 Roslyn 支援的編輯支援的程式碼變更 (C# 和 VB) 列出了目前支援的編輯類型和未來可能的增強功能。

不支援的 .NET 專案

「熱重新載入」在某些專案組態中不適用:

  • 如果您在不使用偵錯工具的情況下使用 Visual Studio,「熱重新載入」僅適用於以 .NET 6+ 為目標的 .NET 應用程式。
  • 如果您要使用 Visual Studio 偵錯工具來執行應用程式,但已在設定中停用 Enable Hot Reload and Edit and Continue when debugging,則不支援熱重新載入。
  • 不支援發行版本或自訂組建設定。 您的專案必須使用Debug組建組態。
  • 如果您是以 F# 或 .NET Native 專案為目標。
  • .NET 熱重新載入不支援某些啟動或編譯最佳化。 例如,如果您專案的偵錯設定檔是以下列方式所設定,則不支援 .NET 熱重新載入:
    • 針對您的專案,啟用修剪。 例如,如果您專案檔案中偵錯設定檔的 PublishTrimmed 設定為 True,則不予支援。
    • 針對您的專案,啟用 ReadyToRun。 例如,如果您專案檔案中偵錯設定檔的 PublishReadyToRun 設定為 True,則不予支援。

如需詳細資訊,請參閱不支援的案例

設定熱重新載入

若要啟用、停用或設定「熱重新載入」,請參閱設定 [編輯後繼續]

警告訊息

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

Screenshot of the apply changes dialog box

如果在對話框中選取無法應用變更時始終重建選項,則不會在目前的 Visual Studio 工作階段中再次看到該對話框,並且 Visual Studio 將自動重建並重新載入,而不是顯示對話方塊。

疑難排解

強烈建議檢查熱重新載入輸出視窗,以取得有關「熱重新載入」工作階段的詳細診斷資訊。

如果在 .NET Core 上使用回應壓縮,請參閱有關回應壓縮的資訊。