天天看點

【譯】在運作時編輯代碼的 .NET 熱重載

今天,我們很高興向你介紹 Visual Studio 2019 中 16.11(預覽版1)中的 .NET 熱重載(通過 .NET 6(預覽版4)中的 dotnet watch 指令行工具)。在這篇文章的其餘部分,我們會介紹什麼是 .NET 熱重載,您如何開始使用這個特性,我們對未來計劃改進的設想,以及目前支援哪種編輯和語言的明确性。

  今天,我們很高興向你介紹 Visual Studio 2019 中 16.11(預覽版1)中的 .NET 熱重載(通過 .NET 6(預覽版4)中的 dotnet watch 指令行工具)。在這篇文章的其餘部分,我們會介紹什麼是 .NET 熱重載,您如何開始使用這個特性,我們對未來計劃改進的設想,以及目前支援哪種編輯和語言的明确性。

什麼是 .NET 熱重載

  使用熱重載,您現在可以在應用程式運作時修改應用程式托管的源代碼,而不需要手動暫停或命中斷點。隻需在應用程式運作時進行受支援的更改,并在我們新的 VisualStudio 體驗中使用“apply code changes”按鈕應用您的編輯。

【譯】在運作時編輯代碼的 .NET 熱重載

  熱重載支援已經存在的和即将到來的項目類型,例如 WPF、Windows Forms、.NET MAUI 預覽版、ASP.NET Core、Console 、WinUI 3 等等。這種支援非常廣泛,支援與任何由 .NET Framework 或 CoreCLR 運作時驅動的項目。(This support is very broad with the core experience working with any project that is powered by .NET Framework or CoreCLR runtimes.)

  通過熱重載,我們的目标是讓這種體驗可用,無論您喜歡如何啟動您的應用程式。通過今天的釋出,您現在可以通過完全內建的 Visual Studio 調試器體驗或 dotnet watch 指令行工具使用此體驗,稍後版本将有更多的選項。

開始

  你可以選擇使用 Visual Studio 的最新預覽版,也可以選擇使用 .NET 6 預覽4,介紹如下。

Visual Studio

  在 Visual Studio 中使用調試器時嘗試熱重載:

      • 下載下傳并安裝 Visual Studio 2019 16.11 預覽版1。
      • 打開支援的項目類型,例如 WPF 應用程式。
      • 通過 F5 啟動附加調試器的應用程式(確定在調試器配置中“enable native code debugging”為禁用)。
      • 打開一個 C# 代碼檔案,其中有些代碼可以通過正在運作的應用程式的使用者界面重新執行(例如:一個按鈕的邏輯代碼或一個 ViewModel 的 command),或者通過 Timer 間隔觸發一些東西,然後更改代碼。
      • 使用 Visual Studio 中的工具欄新的“應用代碼更改(ALT-F10)按鈕”(Continue 按鈕旁邊)來應用代碼更改。請注意,在使用 Visual Studio 時并不需要儲存檔案,這給了您快速更改代碼并繼續進行調試的靈活性。

  如果您所做的更改得到支援,那麼您的應用程式現在将使用新邏輯在運作時進行修補,并且您應該在下一次通過您的操作或類似計時器的觸發代碼,重新執行更新的代碼時看到應用程式行為的更改。

  您還可以繼續使用其他調試器特性,如斷點、編輯并繼續、XAML 熱重載等。您現在所習慣的一切都應該與 .NET 熱重載完全并行。如果有些東西對你不起作用,請讓我們知道!

CLI

  使用 dotnet watch 從指令行啟動應用時使用熱重載:

      • 安裝 .NET 6 預覽4。
      • 更新你的 ASP.NET Core 項目到 .NET 6。
      • launchSettings.json 中添加 “hotReloadProfile”: “aspnetcore” 屬性。
{
  "profiles": {
    "dotnet": {
      "commandName": "Project",
      "hotReloadProfile": "aspnetcore"
    }
  }
}      
      • 使用 dotnet watch 運作項目并檢視輸出,它應該顯示啟用了熱重載。
      • 對您的應用程式托管代碼進行熱重載支援的代碼更改,并儲存檔案以應用。

  就像 Visual Studio 的體驗一樣,你的新邏輯現在應該被應用了,你應該會在下次更新的代碼被重新執行時看到應用程式行為的變化。

  您也可以通過這種方式修改“blazorwasm”熱重載配置檔案,在您的 Blazor WebAssembly 項目中使用上面類似的步驟。你甚至可以在 WindowsForms 或其他由 CoreCLR 支援的項目中嘗試它,隻需手動在 Properties 檔案夾下添加一個帶有上面示例内容的名為 launchSettings.json 的檔案。

  這一功能仍在開發中,我們正在跟蹤未來的改進,将更容易使用 dotnet watch 來熱重載所有類型的 .NET Core 應用程式,而無需 launchSettings.json 檔案,這在目前版本中的還是一個限制。

将在 Visual Studio 2022 和 .NET 6 中的實作最佳

  今天的釋出隻是我們為 .NET 開發人員提供的熱重載的預覽版。在 .NET 6 預覽版和 Visual Studio 2019 中,隻有部分功能可用。該特性的全功能會在 .NET 6(和未來版本的 .NET)以及 Visual Studio 2022 中作為架構和工具集提供最完整功能和最佳經驗。

  為了讓你大緻了解我們計劃在未來的預覽版和最終版本中提供哪些特性,這裡有一些例子:

      • .NET Multi-platform App UI (.NET MAUI):借助 .NET 6 Preview 4,開發人員建構 .NET MAUI 應用程式時,現在可以使用 .NET 熱重載來實作針對 WinUI 3 的項目。在未來的版本中,我們将在 iOS、Android 和 Mac Catalyst 場景中引入 .NET 熱重載支援。
      • Razor Pages:在未來的版本中,将支援熱重載和編輯并繼續 (Edit and Continue,EnC),用于為 .NET 6 或更高版本的網站或 Blazor 應用編輯 Razor。
      • 無需調試器:在 Visual Studio 2022 的未來版本中,我們正在努力添加對使用熱重載而不需要調試器的支援,這意味着開發者将能夠使用 CTRL-F5 啟動他們的應用程式,并且仍然使用熱重載來修補他們正在運作的應用程式。
      • 減少不受支援的更改:在 Visual Studio 2022 和 .NET 6+ 的未來版本中,我們計劃跨多個團隊進行工作,以減少運作時不受支援的編輯的數量。
      • 優化架構以更好地支援熱重載:在.NET 6 中,我們正在研究如何改進某些架構以更好地支援熱重新加載。将包括對 ASP.NET Core, .NET MAUI 和其他架構的調整和優化将使熱重載在更多的情況下更有用。

  以上是我們目前的計劃,請注意,計劃可能會根據客戶的回報和時間表進行更改。

支援/不支援的更改和語言

  無論你如何使用 .NET 熱重載,請注意,有些更改在運作時是不支援的,會提示你一個粗糙的編輯對話框,并要求你重新啟動應用程式。我們仍緻力于該特性和文檔,以詳細說明支援哪些編輯。現在,首先檢視現有的編輯并繼續(EnC)清單等效功能。由于熱重載是由 EnC 驅動的,這将為你更好地了解這個新特性提供一個很好的起點。具體請參見:EnC 文檔。

  此外,雖然上面的例子是特别提到 C# 的,但在 Visual Studio 的調試器下運作時,在各種情況下也支援 Visual Basic。F# 目前在 .NET 6 中還不支援,但我們計劃在未來的版本中根據客戶的回報提供支援。

您的回報很重要

  在這個早期的預覽版中,我們要承認将會有 bug。有時候,如果你嘗試應用一個更改,它可能會悄無聲息地失敗,或者你的應用可能會崩潰,等等。如果您确實遇到了問題,請花點時間向我們報告問題,因為隻有得到您的回報,我們才能確定關鍵問題得到解決,并根據您的輸入确定未來決策的優先級。

  要聯系我們,請使用Visual Studio的回報機制。

原文連結

  https://devblogs.microsoft.com/dotnet/introducing-net-hot-reload/

【譯】在運作時編輯代碼的 .NET 熱重載

作者:MeteorSeed

感謝您閱讀本文,如果您覺得有所收獲,麻煩點一下右邊的“推薦”,您的支援是對我最大的鼓勵...

轉載請注明出處。