全面了解微軟.NET 5,2021年更好邁向.NET 6
譯文【51CTO.com快譯】代際轉(zhuǎn)移可能是微軟2020年開發(fā)者戰(zhàn)略的關(guān)鍵主題之一。這是比較平穩(wěn)的交接,統(tǒng)一新舊工作方式。但到頭來,無論是Project Reunion、WinUI 3還是.NET 5的發(fā)布,新技術(shù)都在向前發(fā)展,將舊技術(shù)甩在身后。
這不是壞事。我們出于多種原因開發(fā)了新的做事方法,但它們常常圍繞一個(gè)關(guān)鍵點(diǎn):新方法更好。它解決了舊工具無法解決的問題,解答了原始解決方案被定義時(shí)未提出的新問題。
面向新世界的新.NET
所有這些原因體現(xiàn)在.NET Framework向.NET 5的轉(zhuǎn)變。20多年前,定義原始.NET Framework時(shí),我們在嚴(yán)格定義的IT環(huán)境中構(gòu)建整體式客戶端/服務(wù)器應(yīng)用程序?,F(xiàn)在我們使用快速變化的基礎(chǔ)架構(gòu)來構(gòu)建混合型的輕量級(jí)分布式微服務(wù)和跨平臺(tái)移動(dòng)應(yīng)用程序。這是全新的世界。
.NET Core是為這種工作方式設(shè)計(jì)的。一開始就跨平臺(tái),除了支持傳統(tǒng)的.NET開發(fā)模式和實(shí)踐外,還旨在支持新的云優(yōu)先移動(dòng)應(yīng)用程序。它通過三個(gè)主要版本獲得越來越多的API;.NET Standard庫開始提供通用的代碼目標(biāo),因而更容易跨它、.NET Framework和Xamarin共享項(xiàng)目。
.NET 5:未來開發(fā)之路
嚴(yán)格上講,該新版本應(yīng)為.NET Core 4,但微軟跳過版本號(hào),避免與.NET Framework的當(dāng)前版本混淆。同時(shí),改用更高的版本號(hào)并棄用名稱中的Core表明這是所有.NET開發(fā)的下一步。兩個(gè)項(xiàng)目仍保留Core名稱:ASP.NET Core 5.0和Entity Framework Core 5,因?yàn)槿源嬖谕瑯影姹咎?hào)的舊項(xiàng)目。
這是重大的里程碑,標(biāo)志著您需要考慮用.NET 5啟動(dòng)所有新項(xiàng)目,并從.NET Framework遷離任何現(xiàn)有代碼。雖然微軟并未擯棄.NET Framework的支持,但它處于維護(hù)模式,將來的次要版本中不會(huì)得到任何新功能。所有新的API和社區(qū)開發(fā)都將采用.NET 5(以及2021年的長期支持.NET 6)。
.NET 5棄用了一些熟悉的技術(shù),比如Web Forms和Windows Communication Foundation。如果您仍在使用它們,最好眼下仍使用.NET Framework 4,計(jì)劃遷移到更新穎的受支持技術(shù),比如ASP.NET的Razor Pages或gRPC。已有計(jì)劃為提供類似API的替代框架提供社區(qū)支持,但是采用更新穎的方法將有助于開發(fā)面向未來的代碼,并使跨平臺(tái)運(yùn)行變得更容易。
.NET 5一個(gè)令人困惑的方面是如何處理.NET Standard庫。它們沒有消失,不過.NET 5代碼不需要直接引用它們,因?yàn)樗鼈儸F(xiàn)在是.NET 5目標(biāo)框架標(biāo)記(TFM)的子集。這個(gè)新的TFM取代了舊的netcoreapp和netstandard TFM,不過如果您編寫的代碼需要跨框架共享,仍可以使用.NET Standard 2.0 TFM以實(shí)現(xiàn)兼容。然而在大多數(shù)情況下,您可能只在.NET 5環(huán)境中工作,因此可以放心地堅(jiān)持使用net5.0 TFM聲明。
.NET 5入門
.NET 5.0繼續(xù)托管一系列同樣的語言,包括新版本的C#和F#。這些添加了許多新功能,作為Visual Studio 16.8的一部分或與更新后的C#Visual Studio Code擴(kuò)展一起提供。微軟已將該框架及其所有實(shí)現(xiàn)(比如Mono的大部分)移到至單個(gè)GitHub存儲(chǔ)庫中,整合了開發(fā),并確保所有版本有相同的基礎(chǔ)功能。隨著微軟轉(zhuǎn)向.NET 6,它會(huì)引入其他更高級(jí)別的實(shí)現(xiàn),包括Xamarin。
新的.NET仍基于為原始Common Language Runtime開發(fā)的即時(shí)編譯技術(shù)。新的CoreCLR在跨多個(gè)處理器架構(gòu)運(yùn)行的同時(shí),繼續(xù)提升性能。蘋果基于ARM的M1處理器問世后,用.NET for macOS編寫的代碼將在基于英特爾和ARM的硬件上以原生二進(jìn)制代碼來運(yùn)行,因此代碼無需經(jīng)過第二層仿真。支持ARM64將使.NET 5應(yīng)用程序得以直接在基于ARM硬件的Windows上運(yùn)行,充分發(fā)揮微軟自己的SQ1和SQ2處理器的功能。
Web Assembly和移動(dòng)操作系統(tǒng)等一些場景需要預(yù)編譯的代碼,.NET與其JIT工具一道提供了提前編譯器?,F(xiàn)在AOT編譯器可用于任何開發(fā)環(huán)境,Uno Platform團(tuán)隊(duì)已經(jīng)看到因Web Assembly支持而顯著提高速度,是以前的Web Assembly語言解釋器的7倍到15倍。
已有計(jì)劃將AOT編譯器作為需要快速啟動(dòng)和內(nèi)存占用較少的應(yīng)用程序的選項(xiàng),比如在資源受限的智能手表和物聯(lián)網(wǎng)硬件上。另一個(gè)選擇是單一文件部署。應(yīng)用程序(包括運(yùn)行時(shí))所需的一切都捆綁成一個(gè)軟件包,因而比較容易在容器中或非Windows系統(tǒng)上部署.NET應(yīng)用程序。
不應(yīng)孤立地看待新的.NET。使用Blazor進(jìn)行Web Assembly開發(fā)和使用MAUI(多平臺(tái)應(yīng)用程序UI)進(jìn)行跨平臺(tái)UI開發(fā)也很重要。通過結(jié)合使用這些技術(shù),.NET 5幾乎無所不包:從Raspberry Pi類硬件、安卓手機(jī)到AWS和Azure上運(yùn)行的Kubernetes托管的容器,無一不足。
2021年邁向.NET 6
重要的一點(diǎn)是,這只是整個(gè)過程中的另一步。.NET 5是將Windows API與OS分離、Project Reunion合并WinRT和Win32 API以及改用WinUI 3和MAUI這些UI層的一項(xiàng)關(guān)鍵技術(shù)。2021年.NET 6發(fā)布后,這方面的許多工作仍將繼續(xù),.NET6是許多這些項(xiàng)目的目標(biāo)。您無需等待.NET 6即可開始遷移。越早開始越好,那樣您有時(shí)間處理可能出現(xiàn)的任何問題。
應(yīng)該將.NET 5視為.NET旅程下一階段的第一步,您應(yīng)該開始拿來所有的舊代碼,決定移植和更新哪些代碼,以及什么代碼需要全面替換。2020年將結(jié)束,您可能在計(jì)劃2021年的開發(fā)時(shí)間表。有鑒于此,.NET 5可以幫助您關(guān)注需要做什么,讓您的軟件資產(chǎn)為節(jié)奏大大加快的未來做好準(zhǔn)備,將來不再與Windows版本或Windows息息相關(guān)。
原文標(biāo)題:Understanding Microsoft .NET 5,作者:Simon Bisson
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】