在運行時編輯代碼的 .NET 熱重載的操作方法
今天,我們很高興向你介紹 Visual Studio 2019 中 16.11(預(yù)覽版1)中的 .NET 熱重載(通過 .NET 6(預(yù)覽版4)中的 dotnet watch 命令行工具)。在這篇文章的其余部分,我們會介紹什么是 .NET 熱重載,您如何開始使用這個特性,我們對未來計劃改進的設(shè)想,以及目前支持哪種編輯和語言的明確性。
今天,我們很高興向你介紹 Visual Studio 2019 中 16.11(預(yù)覽版1)中的 .NET 熱重載(通過 .NET 6(預(yù)覽版4)中的 dotnet watch 命令行工具)。在這篇文章的其余部分,我們會介紹什么是 .NET 熱重載,您如何開始使用這個特性,我們對未來計劃改進的設(shè)想,以及目前支持哪種編輯和語言的明確性。
什么是 .NET 熱重載
使用熱重載,您現(xiàn)在可以在應(yīng)用程序運行時修改應(yīng)用程序托管的源代碼,而不需要手動暫停或命中斷點。只需在應(yīng)用程序運行時進行受支持的更改,并在我們新的 VisualStudio 體驗中使用“apply code changes”按鈕應(yīng)用您的編輯。

熱重載支持已經(jīng)存在的和即將到來的項目類型,例如 WPF、Windows Forms、.NET MAUI 預(yù)覽版、ASP.NET Core、Console 、WinUI 3 等等。這種支持非常廣泛,支持與任何由 .NET Framework 或 CoreCLR 運行時驅(qū)動的項目。(This support is very broad with the core experience working with any project that is powered by .NET Framework or CoreCLR runtimes.)
通過熱重載,我們的目標是讓這種體驗可用,無論您喜歡如何啟動您的應(yīng)用程序。通過今天的發(fā)布,您現(xiàn)在可以通過完全集成的 Visual Studio 調(diào)試器體驗或 dotnet watch 命令行工具使用此體驗,稍后版本將有更多的選項。
開始
你可以選擇使用 Visual Studio 的最新預(yù)覽版,也可以選擇使用 .NET 6 預(yù)覽4,介紹如下。
Visual Studio
在 Visual Studio 中使用調(diào)試器時嘗試熱重載:
- 下載并安裝 Visual Studio 2019 16.11 預(yù)覽版1。
- 打開支持的項目類型,例如 WPF 應(yīng)用程序。
- 通過 F5 啟動附加調(diào)試器的應(yīng)用程序(確保在調(diào)試器配置中“enable native code debugging”為禁用)。
- 打開一個 C# 代碼文件,其中有些代碼可以通過正在運行的應(yīng)用程序的用戶界面重新執(zhí)行(例如:一個按鈕的邏輯代碼或一個 ViewModel 的 command),或者通過 Timer 間隔觸發(fā)一些東西,然后更改代碼。
- 使用 Visual Studio 中的工具欄新的“應(yīng)用代碼更改(ALT-F10)按鈕”(Continue 按鈕旁邊)來應(yīng)用代碼更改。請注意,在使用 Visual Studio 時并不需要保存文件,這給了您快速更改代碼并繼續(xù)進行調(diào)試的靈活性。
如果您所做的更改得到支持,那么您的應(yīng)用程序現(xiàn)在將使用新邏輯在運行時進行修補,并且您應(yīng)該在下一次通過您的操作或類似計時器的觸發(fā)代碼,重新執(zhí)行更新的代碼時看到應(yīng)用程序行為的更改。
您還可以繼續(xù)使用其他調(diào)試器特性,如斷點、編輯并繼續(xù)、XAML 熱重載等。您現(xiàn)在所習(xí)慣的一切都應(yīng)該與 .NET 熱重載完全并行。如果有些東西對你不起作用,請讓我們知道!
CLI
使用 dotnet watch 從命令行啟動應(yīng)用時使用熱重載:
- 安裝 .NET 6 預(yù)覽4。
- 更新你的 ASP.NET Core 項目到 .NET 6。
- launchSettings.json 中添加 “hotReloadProfile”: “aspnetcore” 屬性。
{
"profiles": {
"dotnet": {
"commandName": "Project",
"hotReloadProfile": "aspnetcore"
}
}
}
- 使用 dotnet watch 運行項目并查看輸出,它應(yīng)該顯示啟用了熱重載。
- 對您的應(yīng)用程序托管代碼進行熱重載支持的代碼更改,并保存文件以應(yīng)用。
就像 Visual Studio 的體驗一樣,你的新邏輯現(xiàn)在應(yīng)該被應(yīng)用了,你應(yīng)該會在下次更新的代碼被重新執(zhí)行時看到應(yīng)用程序行為的變化。
您也可以通過這種方式修改“blazorwasm”熱重載配置文件,在您的 Blazor WebAssembly 項目中使用上面類似的步驟。你甚至可以在 WindowsForms 或其他由 CoreCLR 支持的項目中嘗試它,只需手動在 Properties 文件夾下添加一個帶有上面示例內(nèi)容的名為 launchSettings.json 的文件。
這一功能仍在開發(fā)中,我們正在跟蹤未來的改進,將更容易使用 dotnet watch 來熱重載所有類型的 .NET Core 應(yīng)用程序,而無需 launchSettings.json 文件,這在當前版本中的還是一個限制。
將在 Visual Studio 2022 和 .NET 6 中的實現(xiàn)最佳
今天的發(fā)布只是我們?yōu)?.NET 開發(fā)人員提供的熱重載的預(yù)覽版。在 .NET 6 預(yù)覽版和 Visual Studio 2019 中,只有部分功能可用。該特性的全功能會在 .NET 6(和未來版本的 .NET)以及 Visual Studio 2022 中作為框架和工具集提供最完整功能和最佳經(jīng)驗。
為了讓你大致了解我們計劃在未來的預(yù)覽版和最終版本中提供哪些特性,這里有一些例子:
- .NET Multi-platform App UI (.NET MAUI):借助 .NET 6 Preview 4,開發(fā)人員構(gòu)建 .NET MAUI 應(yīng)用程序時,現(xiàn)在可以使用 .NET 熱重載來實現(xiàn)針對 WinUI 3 的項目。在未來的版本中,我們將在 iOS、Android 和 Mac Catalyst 場景中引入 .NET 熱重載支持。
- Razor Pages:在未來的版本中,將支持熱重載和編輯并繼續(xù) (Edit and Continue,EnC),用于為 .NET 6 或更高版本的網(wǎng)站或 Blazor 應(yīng)用編輯 Razor。
- 無需調(diào)試器:在 Visual Studio 2022 的未來版本中,我們正在努力添加對使用熱重載而不需要調(diào)試器的支持,這意味著開發(fā)者將能夠使用 CTRL-F5 啟動他們的應(yīng)用程序,并且仍然使用熱重載來修補他們正在運行的應(yīng)用程序。
- 減少不受支持的更改:在 Visual Studio 2022 和 .NET 6+ 的未來版本中,我們計劃跨多個團隊進行工作,以減少運行時不受支持的編輯的數(shù)量。
- 優(yōu)化框架以更好地支持熱重載:在.NET 6 中,我們正在研究如何改進某些框架以更好地支持熱重新加載。將包括對 ASP.NET Core, .NET MAUI 和其他框架的調(diào)整和優(yōu)化將使熱重載在更多的情況下更有用。
以上是我們目前的計劃,請注意,計劃可能會根據(jù)客戶的反饋和時間表進行更改。
支持/不支持的更改和語言
無論你如何使用 .NET 熱重載,請注意,有些更改在運行時是不支持的,會提示你一個粗糙的編輯對話框,并要求你重新啟動應(yīng)用程序。我們?nèi)灾铝τ谠撎匦院臀臋n,以詳細說明支持哪些編輯?,F(xiàn)在,首先查看現(xiàn)有的編輯并繼續(xù)(EnC)列表等效功能。由于熱重載是由 EnC 驅(qū)動的,這將為你更好地理解這個新特性提供一個很好的起點。具體請參見:EnC 文檔。
此外,雖然上面的例子是特別提到 C# 的,但在 Visual Studio 的調(diào)試器下運行時,在各種情況下也支持 Visual Basic。F# 目前在 .NET 6 中還不支持,但我們計劃在未來的版本中根據(jù)客戶的反饋提供支持。
到此這篇關(guān)于在運行時編輯代碼的 .NET 熱重載的操作方法的文章就介紹到這了,更多相關(guān).NET 熱重載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET JSON字符串與實體類的互轉(zhuǎn)換示例代碼
本篇文章主要是對ASP.NET JSON字符串與實體類的互轉(zhuǎn)換的示例代碼進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01
asp.net DZ論壇中根據(jù)IP地址取得所在地的代碼
從dz .net版發(fā)現(xiàn)的這個不錯的函數(shù),大家以后就可以方便調(diào)用了2008-10-10
ajaxToolkit:CalendarExtender演示與實現(xiàn)代碼
Ajax的CalenderExtender的日期選擇實現(xiàn)介紹,感興趣的你可以了解下,就當是鞏固知識,希望本文對你有所幫助2013-01-01
Ajax Throws Sys.WebForms.PageRequestManagerErrorException wi
注冊腳本: ScriptManager.RegisterStartupScript(this, typeof(string), "Message", "alert('error message');", true); 即可解決,困惑了我一下午。2008-11-11
如何使用 .NET 創(chuàng)建新的 WPF 應(yīng)用
本文介紹了如何使用.NET創(chuàng)建新的WPF應(yīng)用,并向窗口添加控件,通過處理控件事件,可以為應(yīng)用提供功能,感興趣的朋友跟隨小編一起看看吧2024-11-11
.NET Framework攔截HTTP請求的實現(xiàn)
本文主要介紹了.NET Framework攔截HTTP請求的實現(xiàn),主要用于記錄 HTTP 信息,調(diào)試程序、分析程序性能等方面,具有一定的參考價值,感興趣的可以了解一下2024-03-03
DataView.RowFilter的使用(包括in,like等SQL中的操作符)
這篇blog轉(zhuǎn)自C# examples,對DataView.RowFilter做了詳細介紹,能像SQL中使用in,like等操作符一樣進行過濾查詢,并附有實例,使用方便。2011-07-07

