在 Visual Studio 中使用熱重載撰寫、偵錯和執行程式代碼 (C#、Visual Basic、C++)
從 Visual Studio 2022 開始,Visual Studio 中的熱重載體驗適用於受控 .NET 和原生C++應用程式。 無論您正在處理的應用程式類型為何,熱重載的意圖都是盡可能節省編輯之間的應用程式重新啟動次數,藉由減少您等待應用程式重建、重新啟動、重新流覽至應用程式本身先前的位置等方式,讓您更有生產力。
我們可讓您編輯應用程式的程式代碼檔案,並立即將程式代碼變更套用至執行中的應用程式,也就是 熱重載,藉以改善生產力。 套用變更之後,請再次執行程式碼,方法是在應用程式本身採取動作(或透過某種定時器等等),並立即查看變更;不需要透過斷點暫停應用程式!
使用熱重載更新執行中的程序代碼
使用 F5 附加的調試程式啟動應用程式,或者,如果支援 ,Ctrl+F5,。
開啟程式代碼檔案並變更程序代碼。
使用 [熱重載] 按鈕或按下 ALT+F10套用程式碼變更。
若要查看使用者介面中的變更,必須重新執行程序代碼。 例如,按鈕的反向程式碼必須重新執行,或透過計時器以間隔觸發的程式碼。 另一個範例是,由於MetadataUpdateHandler 功能,ASP.NET Core 支援自動重新整理瀏覽器。
支援 .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 或以下為目標)不支援「無調試程式」案例,而且必須使用調試程式來取得熱重載支援。
- 搭配 .NET 6+ 應用程式使用Visual Studio 2022時,大部分案例都支援。 此支援不限於上述新的「無調試程式」功能。 它還包括其他新功能,例如支援 Blazor 專案的熱重載功能,更廣泛地講,它還支援在任何 ASP.NET Core 應用程式中編輯 Razor 檔案,以及 CSS 熱重載。 使用 Visual Studio 2022 以及以 .NET 6 為目標的應用程式,可以提供您最強大的熱重載體驗。
下表顯示根據 Visual Studio 2022 (17.8) 中要求的最低 .NET 版本,哪些專案在附加調試器時(F5)及未附加調試器時(Ctrl+F5)支援 .NET 熱重載。
應用程式類型 | 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(Windows Presentation Foundation) | ✅ | .NET 6 | .NET 6 |
WinForms | ✅ | .NET 6 | .NET 6 |
ASP.NET | ✅ | .NET 6 | .NET 6 |
Blazor 伺服器 | .NET 6 | .NET 6 | .NET 6 |
Blazor WebAssembly(Blazor 網頁組件) | .NET 6 | .NET 6 | .NET 6 |
毛 伊 島 (WinUI/Android/iOS) |
.NET 6 | -- | -- |
您可以使用熱重載進行 的編輯 類型是由運行時間和編譯程式版本決定,而不是由您用來啟動應用程式的方法(F5 或 Ctrl+F5)。
在下列各節中,我們會提供其他詳細數據。
支援C++應用程式
使用 Visual Studio 2022 並以除錯器啟動您的應用程式時,您可以藉由使用 [熱重載] 按鈕,在除錯器運行下進行原生 C++ 應用程式的熱重載。 使用 CMake 和 OpenFolder 專案建置的應用程式也支援熱重載。
若要讓項目支援熱重載,您需要設定下列選項:
- 專案 > 屬性 > C/C++ > 一般 >偵錯資訊格式 必須設定為 [用於編輯並繼續的程式資料庫
/ZI
] - 專案 > 屬性 > 連結器 > 一般 >啟用累加連結 必須設定為 [是
/INCREMENTAL
]
如需支持的編輯,請參閱 C++支援的程式代碼變更。
在使用調試器時,使用 Visual Studio 2022 並搭配 .NET 應用程式
使用 Visual Studio 2022 並使用調試程式啟動應用程式時,熱重載適用於大部分的應用程式架構。
無論您在何處使用 .NET 和 Visual Studio 受管控的調試器,您都應該獲得基本的 Hot Reload 支援。 這一事實表示,即使是 Azure Functions 這類專案在此案例中也非常出色。
注意
根據預設,某些專案會使用混合模式偵錯,不支援熱重載。 您可以在專案設定中修改此設定,方法是 將 [專案 > 屬性] > [偵錯] > [開啟偵錯啟動設定介面] UI > [啟用原生程式碼偵錯] 為 false。
Visual Studio 2022 搭配 .NET 應用程式,但不使用調試程式
當以大多數 .NET 6+ 應用程式類型為目標時,即使不使用調試程式,也可以使用熱重載。
這項功能專屬於 .NET 6+。 未以 .NET 6+ 為目標的應用程式(也就是以 .NET 5 或以下為目標)不支援「無調試程式」案例,而且必須使用調試程式來存取熱重載功能。
此外,並非所有項目類型目前都支援「無調試程式」案例,請參閱 支援 .NET 應用程式。
Visual Studio 2022 搭配 .NET 6+ 應用程式
如果您使用 Visual Studio 2022 並處理以 .NET 6+ 為目標的應用程式,您會獲得功能最強大且最完善的熱重載體驗。
在此案例中支援:
- Blazor 應用程式(伺服器和 WebAssembly)
- 在 Blazor 和一般 ASP.NET Core 網站中編輯 Razor 檔案
- CSS 熱重載
- XAML 熱重載
- 在不使用除錯器的情況下執行應用程式時,支援熱重載功能(如前面更詳細說明)
如果您以 .NET 6+為目標,您可以繼續取得即將推出的 Visual Studio 2022 更新和 .NET 功能區與主要版本的改善。
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 熱重載體驗由 調試程式 和 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,則不支援它。
- 您的項目已啟用 修整功能。 例如,如果您的偵錯配置檔的項目檔中
如需詳細資訊,請參閱 不支援的案例。
設定即時重新載入
若要開啟、停用或設定熱重載,請參閱 設定編輯後繼續。
警告訊息
如果您看到下列對話框,熱重載無法在不重新啟動的情況下套用目前的編輯。 您可以選擇重建應用程式並套用變更(重新啟動),或繼續編輯。 如果您重建,所有應用程式狀態都會遺失。 如果您繼續編輯,可能會發生其他變更或更正,而導致熱重載再次運作。
如果您在對話框中選取 無法套用變更時永遠重建 選項,則在目前的 Visual Studio 會話中不會再次看到對話框,而 Visual Studio 會自動重建和重新載入,而不是顯示對話框。
故障排除
強烈建議檢查 [熱重載輸出] 視窗,以獲取有關熱重載會話的詳細診斷資訊。
如果您在 .NET Core 上使用回應壓縮,請參閱 回應壓縮的相關信息。