ASP.NET Core 的 .NET 熱重載支援

.NET 熱重載會將程式代碼變更,包括樣式表單的變更套用至執行中的應用程式,而不重新啟動應用程式,而不會遺失應用程式狀態。 .NET 6 或更新版本中所有 ASP.NET Core 都支援熱重載。

一般而言,更新的程式代碼會重新執行,以在下列情況下生效:

  • 某些啟動邏輯只會執行一次:
    • 中間件,除非程式代碼更新是內嵌中間件委派。
    • 已設定的服務。
    • 路由建立和設定,除非程式碼更新是路由處理器委派(例如 OnInitialized)。
  • 在 Blazor 應用程式中,架構會自動 Razor 觸發元件 渲染。
  • 在 MVC 和 Razor Pages 應用程式中,熱重新載入 會自動觸發瀏覽器重新整理。
  • 拿掉 Razor元件參數 屬性並不會使元件重新呈現。 應用程式必須重新啟動。

如需支援案例的詳細資訊,請參閱支援的程式代碼變更(C# 和 Visual Basic)。

Blazor WebAssembly

Blazor WebAssembly 即時重載支援下列程式碼變更:

  • 新類型。
  • 巢狀類別。
  • 方法主體的大部分變更,例如新增、移除和編輯變數、表達式和語句。
  • Lambda 運算式和本地函數的主體變更。
  • 將靜態和實例方法新增至現有的類型。
  • 將靜態和實例欄位、事件和屬性新增至現有的類型。
  • 將靜態 Lambda 新增至現有的方法。
  • 將擷取 this 的 Lambda 新增到已經擷取 this 的現有方法中。

請注意,移除先前設定元件參數值的屬性時,會處置元件並重新初始化,以將移除的參數設定回其預設值。

對於 Blazor WebAssembly 應用程式,不支援下列程式代碼變更:

Blazor WebAssembly 即時重載支援下列程式碼變更:

  • 新類型。
  • 巢狀類別。
  • 方法主體的大部分變更,例如新增、移除和編輯變數、表達式和語句。
  • Lambda 運算式和本地函數的主體變更。
  • 將靜態和實例方法新增至現有的類型。
  • 將靜態欄位新增至現有的類型。
  • 將靜態 Lambda 新增至現有的方法。
  • 將擷取 this 的 Lambda 新增到已經擷取 this 的現有方法中。

請注意,移除先前設定元件參數值的屬性時,會處置元件並重新初始化,以將移除的參數設定回其預設值。

對於 Blazor WebAssembly 應用程式,不支援下列程式代碼變更:

  • 加入新的 await 運算符 或 yield 關鍵詞 表達式。
  • 變更方法參數的名稱。
  • 新增 (非static) 實例欄位、事件或屬性。

Blazor WebAssembly 即時重載支援下列程式碼變更:

  • 方法主體的大部分變更,例如新增、移除和編輯變數、表達式和語句。
  • Lambda 運算式和本地函數的主體變更。

對於 Blazor WebAssembly 應用程式,不支援下列程式代碼變更:

  • 新增 Lambda 函數或本機函式。
  • 加入新的 await 運算符 或 yield 關鍵詞 表達式。
  • 變更方法參數的名稱。
  • 方法主體以外的變更。
  • 新增 (非static) 實例欄位、事件或屬性。

.NET 命令列介面 (CLI)

使用 dotnet watch 命令啟動熱重載:

dotnet watch

若要強制應用程式重建並重新啟動,請在命令殼層中使用 鍵盤組合 Ctrl+R 。

當進行不被支援的程式碼編輯時,此類編輯稱為 不雅編輯,系統會詢問您是否想重新啟動應用程式:

  • 是:重新啟動應用程式。
  • 否:不會重新啟動應用程式,而且不會讓應用程式在沒有套用變更的情況下執行。
  • 一律:在發生粗魯的編輯時,視需要重新啟動應用程式。
  • 永不:不會重新啟動應用程式,並避免未來的提示。

若要停用熱重載的支援,請將 --no-hot-reload 選項傳遞至 dotnet watch 命令:

dotnet watch --no-hot-reload

停用熱重載

在 Properties/launchSettings.json 中的下列設定會停用熱重載:

"hotReloadEnabled" : false

WebAssembly 熱重新載入WasmEnableHotReload()

在 .NET 10 及之後版本中,WasmEnableHotReloadMSBuild 屬性控制 .NET WebAssembly 應用程式(包括Blazor WebAssembly應用程式及非Blazor WebAssembly瀏覽器應用程式(wasmbrowser模板)專案的建置輸出中是否包含 熱重新載入 基礎設施。 對於 true 組態,此屬性的預設值為 Debug。

將該屬性設為 false,會從 dotnet build 輸出中移除 熱重新載入 相依性,這在產生可與 bundler 相容的成品時很有用,例如供 webpack 或 Vite 使用。

要停用 WebAssembly 應用程式的 熱重新載入,請在應用程式的專案檔案中設定屬性為 false (.csproj):

<PropertyGroup>
  <WasmEnableHotReload>false</WasmEnableHotReload>
</PropertyGroup>

若要啟用自訂(非)Debug配置的 熱重新載入,請將屬性設為true:

<PropertyGroup>
  <WasmEnableHotReload>true</WasmEnableHotReload>
</PropertyGroup>

欲了解更多關於在應用程式中Blazor WebAssembly控制 熱重新載入 的資訊,請參閱除錯 ASP.NET Core Blazor 應用程式。

其他資源

如需詳細資訊,請參閱 Visual Studio 檔中的下列資源: