在 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 核心應用程式中編輯 Razor 檔案,以及 CSS 熱重載。 使用 Visual Studio 2022 搭配以 .NET 6 為目標的應用程式,可提供您最強大的熱重載體驗。
下表根據 Visual Studio 2022 (17.8) 中支援的最低 .NET 版本,哪些項目支援附加調試程式 (F5) 且未附加調試程式 (Ctrl+F5)。
應用程式類型 | 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 |
毛 伊 島 (WinUI/Android/iOS) |
.NET 6 | -- | -- |
您可以使用熱重載進行 的編輯
在下列各節中,我們會提供其他詳細數據。
支援C++應用程式
使用 Visual Studio 2022 並使用除錯程式啟動您的應用程式時,您可以使用 [熱重載] 按鈕,在調試程式下執行時,熱重載原生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 或以下為目標)不支援「無調試程式」案例,而且必須使用調試程式來存取熱重載功能。
此外,並非所有項目類型目前都支援「無調試程式」案例,請參閱
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,則此設定不受支援。
- 已為您的項目啟用 修剪功能。 例如,如果在您的專案檔案中的偵錯設定檔裡將
如需詳細資訊,請參閱 不支援的案例。
設定熱重載
若要開啟、停用或設定熱重載,請參閱 設定編輯後繼續。
警告訊息
如果您看到下列對話框,熱重載無法在不重新啟動的情況下套用目前的編輯。 您可以選擇重建應用程式並套用變更(重新啟動),或繼續編輯。 如果您重建,所有應用程式狀態都會遺失。 如果您繼續編輯,可能會發生其他變更或更正,而導致熱重載再次運作。
如果您在對話框中無法套用變更時選取 [
故障排除
強烈建議檢查 [熱重載輸出] 視窗,以取得有關熱重載會話的詳細診斷資訊。
如果您在 .NET Core 上使用回應壓縮,請參閱 回應壓縮的相關信息。