.NET?6更新使.NET生態(tài)系統(tǒng)蛻變
.NET 6 是自.NET 4 框架以來(lái)生態(tài)系統(tǒng)看到的最大版本更新,雖然.NET Core 是2014年開(kāi)始非常大的一項(xiàng)重大戰(zhàn)略舉措,但是.NET 6是真正的具有強(qiáng)大動(dòng)力的非常重要的版本。
2021年11月9日即將正式發(fā)布的.NET 6, 也許你認(rèn)為.NET 5才剛剛發(fā)布,我才剛開(kāi)始使用.NET Core 3.1, .NET6 就又要發(fā)布了 ,沒(méi)錯(cuò)的,.NET 5是2020年11月10日發(fā)布,.NET Core 3.1早在2019年12月就發(fā)布了,微軟已經(jīng)承諾了每年都會(huì)發(fā)布一個(gè)版本的.NET , .NET 6正是按照時(shí)間表發(fā)布的版本。和這個(gè)版本發(fā)布節(jié)奏對(duì)應(yīng)有一個(gè)支持政策:https://dotnet.microsoft.com/platform/support/policy/dotnet-core
從.NET 5開(kāi)始,奇數(shù)版本版本18個(gè)月修補(bǔ)丁周期,而偶數(shù)版本有 三年 的修補(bǔ)丁周期。如果您已經(jīng)將應(yīng)用遷移到.NET Core 3.1,請(qǐng)注意,它有一個(gè)為期三年的修補(bǔ)丁周期,將于 2022 年 12 月結(jié)束;如果您仍在任何之前版本的 .NET Core上,則您目前已不在支持周期內(nèi)。雖然尚未宣布對(duì).NET框架 4.6.2 及以后的支持正式結(jié)束,但微軟表示,.NET 框架 4.8 是.NET 框架的最后一個(gè)主要版本,將會(huì)隨Windows 的支持計(jì)劃更新:新的功能開(kāi)發(fā)應(yīng)針對(duì)以前稱為 .NET Core(例如.NET 6)的平臺(tái)。
.NET 6 帶來(lái)了許多性能改進(jìn)和生產(chǎn)力提升,而且還是一個(gè)長(zhǎng)期支持版本 。在.NET 的每個(gè)連續(xù)版本中,.NET 在執(zhí)行速度和內(nèi)存使用方面都取得了一些令人印象深刻的進(jìn)步。如果你一直沒(méi)有跟蹤, 你很可能會(huì)被. NET 框架的累積收益吹走。這一點(diǎn)你可以看看Techempower的測(cè)試的報(bào)告,具體參見(jiàn) https://www.techempower.com/benchmarks/
變化很大
我們從 .NET 5開(kāi)始向前看,作為長(zhǎng)期支持 (LTS) 版本,.NET 6 代表著進(jìn)一步的改進(jìn),并具有大量的設(shè)計(jì)和性能改進(jìn)。我們將主要看看ASP.NET 6 運(yùn)行時(shí)間的性能改進(jìn)列表和.NET 6 中的中斷更改,可以看到變化非常大。
C# 語(yǔ)言更新
C#語(yǔ)言的最新版本是10.0,有幾個(gè)有趣的變化,對(duì)于愛(ài)整潔的csharper 來(lái)說(shuō),全局引用(Global using)和 文件范圍的命名空間 是很好的互補(bǔ)。現(xiàn)在,您可以聲明適用于整個(gè)編譯單元(很可能是項(xiàng)目)的全局使用,并避免到每個(gè)文件頂部的去添加相同指令集。文件范圍的命名空間還允許您聲明適用于給定文件中所有代碼的命名空間,無(wú)需單行無(wú)需更多匹配卷曲大括號(hào),源文件中的凹痕級(jí)別也較少。
以前
CSharp9_Widget.cs
using System; using System.Collections.Generic; using System.Linq; namespace MyNamespace.Data { class Widget { private List<WidgetPart> _widgetParts; public IEnumerable<WidgetPart> RequiredParts => _widgetParts; public bool RequiresPart(int partId) => _widgetParts.Any(x => x.Id == partId); } }
CSharp9_WidgetPartsInventory.cs
using System; using System.Collections.Generic; using System.Linq; namespace MyNamespace.Data { class WidgetPartsInventory { private Dictionary<int, WidgetPart> _widgetPartsById; public bool HavePartsToBuildWidget(Widget widget) => widget.RequiredParts.All(p => _widgetPartsById.ContainsKey(p.Id)); } }
現(xiàn)在:
CSharp10_GlobalUsing.cs
global using System; global using System.Collections.Generic; global using System.Linq;
CSharp10_Widget.cs
namespace MyNamespace.Data; class Widget { private List<WidgetPart> _widgetParts; public IEnumerable<WidgetPart> RequiredParts => _widgetParts; public bool RequiresPart(int partId) => _widgetParts.Any(x => x.Id == partId); }
CSharp10_WidgetPartsInventory.cs
namespace MyNamespace.Data; class WidgetPartsInventory { private Dictionary<int, WidgetPart> _widgetPartsById; public bool HavePartsToBuildWidget(Widget widget) => widget.RequiredParts.All(p => _widgetPartsById.ContainsKey(p.Id)); }
還有其他一些與Record、模式和插值字符串相關(guān)的更新,但這些更新大多是語(yǔ)法糖。
ASP.NET Core 更新
如果你閱讀每個(gè)版本的說(shuō)明,很容易看到 ASP.NET Core 是一個(gè)核心,從網(wǎng)絡(luò)主機(jī)和最小 API,熱重載 到blazor都有很多感興趣特性。
網(wǎng)絡(luò)主機(jī)和最小 API
從 ASP.NET Core開(kāi)始,每個(gè)應(yīng)用程序都將應(yīng)用初始化代碼拆分為Program.cs(用于創(chuàng)建 Web 主機(jī))和"Startup.cs(用于配置路由和 IoC 容器配置等應(yīng)用程序問(wèn)題)中,通常包含的兩個(gè)單獨(dú)的Class。特別是Startup類有一種神奇的感覺(jué),它的方法從來(lái)沒(méi)有被開(kāi)發(fā)人員直接調(diào)用。而是WebHost在幕后自動(dòng)調(diào)用配置方法。
ASP.NET團(tuán)隊(duì)分析了這個(gè)設(shè)計(jì),并與其他 Web 框架相比,認(rèn)為設(shè)置涉及的東西太多。因此,最小的API概念誕生了。 現(xiàn)在,應(yīng)用程序初始化可以全部包含在一個(gè)文件中。而且你可能感到奇怪,Main方法都不需要了??梢栽趹?yīng)用設(shè)置中定義路由,從而大大減少代碼數(shù)量以啟動(dòng)和運(yùn)行一個(gè)應(yīng)用程序。
var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", () => "Hello World!"); app.Run();
當(dāng)然如果你仍然喜歡將服務(wù)設(shè)置與應(yīng)用配置分離的組織樣式,你仍然可以為 IServiceCollection 和 IApplicationBuilder 創(chuàng)建擴(kuò)展方法,并從構(gòu)建器和應(yīng)用程序?qū)ο笳{(diào)用它們。
Hot Reload
幾年來(lái),許多 Javascript 框架都支持熱重載,現(xiàn)在它也成為 C#中 ASP.NET Core應(yīng)用的標(biāo)配:通過(guò)熱重加載,您可以在應(yīng)用運(yùn)行期間(在調(diào)試器下)編輯您的 C#代碼,并且您的代碼更改將自動(dòng)反映在您的應(yīng)用中,而不會(huì)丟失應(yīng)用狀態(tài)。換句話說(shuō),應(yīng)用程序不需要重新啟動(dòng)。對(duì)于調(diào)試和交互式開(kāi)發(fā)工作流程來(lái)說(shuō),這應(yīng)該是一個(gè)很好的改進(jìn)。 這個(gè)功能對(duì)于開(kāi)發(fā)來(lái)說(shuō)非常重要,就是這個(gè)小功能微軟近日激怒了開(kāi)源.NET社區(qū),好消息是微軟聽(tīng)取了社區(qū)的聲音,恢復(fù)了通過(guò)CLI支持HotReload功能。具體參見(jiàn) http://www.dbjr.com.cn/news/805653.html
Blazor
在 ASP.NET Core 6 里面有大量的更新是關(guān)于Blazor。例如,Blazor 應(yīng)用程序現(xiàn)在可以直接編譯到 WebAssembly,以便在 IL 解釋(即.NET 本地編譯)版本的相同代碼上來(lái)提高應(yīng)用程序速度。本地編譯/調(diào)試體驗(yàn)仍然很快,因?yàn)槁L(zhǎng)的編譯時(shí)間僅適用于包裝/發(fā)布。說(shuō)到性能,Blazor WebAssembly可實(shí)現(xiàn)客戶端代碼的多線程。Javascript 受制于瀏覽器中的單線程。真正的多線程為可以從并行處理中受益的應(yīng)用程序開(kāi)辟了一些新的可能性(當(dāng)然,這取決于瀏覽器的支持)。
還有一個(gè)非常有趣的功能,使 Blazor 可用于通過(guò) MAUI 編寫(xiě)桌面應(yīng)用程序。 Blazor 的最大好處就是開(kāi)發(fā)人員可以完全用 C# 編寫(xiě) Web 應(yīng)用程序,而不需要為了寫(xiě)前端必須切換到 Javascript。 如果沒(méi)有 C# 和 Javascript 之間的額外接縫,前端和后端代碼之間就不需要映射層。 可以在兩側(cè)使用相同的 C# 模型,這意味著需要的代碼更少,因此開(kāi)發(fā)應(yīng)用程序所需的時(shí)間也更少。 Blazor 桌面進(jìn)一步擴(kuò)展了這一概念,以允許此共享代碼現(xiàn)在也可以與桌面應(yīng)用程序無(wú)縫集成。
MAUI
MAUI 是 Multi-platform App UI 的縮寫(xiě),是微軟對(duì)跨平臺(tái) UI 框架的下一個(gè)嘗試。 MAUI 是 Xamarin 的演進(jìn),還包括桌面平臺(tái)。 它允許從單個(gè)代碼庫(kù)針對(duì) iOS、Android、macOS 和 Windows。 MAUI 處理對(duì)本機(jī)平臺(tái) API 的抽象,因此您可以以與平臺(tái)無(wú)關(guān)的方式訪問(wèn)設(shè)備傳感器等內(nèi)容。 對(duì) Xamarin 的一種印象是,它們最終得到的界面很少,而且在任何平臺(tái)上都不太好看。 MAUI 將如何解決這一問(wèn)題還有待觀察。 如果你關(guān)心的是跨多個(gè)平臺(tái)的開(kāi)發(fā)速度和維護(hù)成本,那么 MAUI 值得仔細(xì)研究。 MAUI 要在2022年的第二個(gè)季度正式發(fā)布,建議當(dāng)前采取觀望的方法,進(jìn)行小的嘗試以了解平臺(tái)在全面采用之前的長(zhǎng)期發(fā)展方向。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ASP.NET實(shí)現(xiàn)word文檔在線預(yù)覽功能代碼
文檔管理系統(tǒng)需要實(shí)現(xiàn)WORD能在線預(yù)覽功能,以前覺(jué)得挺難的,經(jīng)過(guò)一番研究發(fā)現(xiàn),WORD自帶的另存為可以保存為HTMl文件。2010-07-07C#Web應(yīng)用程序入門(mén)經(jīng)典學(xué)習(xí)筆記之一
C#Web應(yīng)用程序入門(mén)經(jīng)典學(xué)習(xí)筆記之一...2006-08-08.Net中Task Parallel Library的基本用法
這篇文章介紹了.Net中Task Parallel Library的基本用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10.Net結(jié)構(gòu)型設(shè)計(jì)模式之裝飾模式(Decorator)
這篇文章介紹了.Net結(jié)構(gòu)型設(shè)計(jì)模式之裝飾模式(Decorator),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05