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

.NET 熱重新載入會將程式碼變更 (包括樣式表單的變更) 套用至執行中的應用程式,無需重新啟動應用程式,也不會遺失應用程式狀態。 所有 ASP.NET Core 6.0 和更新版本專案都支援熱重新載入。

一般而言,更新的程式碼會重新執行以便生效,並且有以下條件:

  • 某些啟動邏輯只會執行一次:
    • 中介軟體,除非程式碼更新是針對內嵌中介軟體委派。
    • 已設定的服務。
    • 路由建立和設定,除非程式碼更新是針對路由處理常式委派 (例如,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

進行不受支援的程式碼編輯時 (稱為不完全的編輯),dotnet watch 會詢問您是否要重新啟動應用程式:

  • :重新開啟應用程式。
  • :不要重新啟動應用程式,並讓應用程式繼續執行而不套用變更。
  • 永遠:發生不完全的編輯時,視需要重新啟動應用程式。
  • 永不:不要重新啟動應用程式,並避免未來的提示。

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

dotnet watch --no-hot-reload

停用熱重新載入

Properties/launchSettings.json 中的下列設定可停用熱重新載入:

"hotReloadEnabled" : false

其他資源

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