至2002微軟公司推出.NET平臺已近15年,在互聯(lián)網(wǎng)快速迭代的浪潮中,許多語言已被淘汰,同時也有更多新的語言涌現(xiàn)瀑凝,但 .Net 依然堅(jiān)挺的站在系統(tǒng)開發(fā)平臺的一線陣營中洽议,并且隨著.NET Core 即將到來(2016年6月27日)的正式版瑟慈,勢必迎來新一輪春天。
一 .NET 的 Framework 們
要理解.NET Core就有必要了解之前的.NET平臺的眾多Framework們见转。2002年微軟公司發(fā)布的第一個.NET框架————.NET Framework水醋,不久后又發(fā)布了.NET Compact Framework 用于在較小的移動設(shè)備(Windows mobile)旗笔,而.NET Compact Framework 也含有一套 類似.NET Framework 體系(Runtime, Framework,Application Model),它是一個復(fù)制精簡版的 .NET Framework离例。在數(shù)年間微軟樂此不疲的推出了數(shù)個類似 .NET Framework的框架换团,以用于在不同的設(shè)備和平臺上運(yùn)行。每個Framework都有類似的體系但又不完全相同的宫蛆,這樣Framework越來越多,對開發(fā)者來說不一樣的設(shè)備即便功能相同也需要維護(hù)多套代碼的猛,增加了開發(fā)的復(fù)雜度耀盗。
二 .NET Core的到來
微軟對這些問題的重新思考和改進(jìn)讓.NET Core橫空出世。
.NET Core是一個開源的模塊化的Framework卦尊,不管是開發(fā)web或移動設(shè)備都在同一個Framework(.NET Core)下運(yùn)行叛拷,而且 .NET Core也可在不同的操作系統(tǒng)上運(yùn)行,包括Windows岂却、linux忿薇、MacOS,實(shí)現(xiàn)了跨平臺跨設(shè)備躏哩。
更棒的是.NET Core 在發(fā)布程序時不用事先安裝Framework而是通過Nuget下載署浩,這樣在初次部署時就不用安裝一個復(fù)雜而龐大Framework,而是按需下載扫尺。這種基于Nuget的按需加載鑄就了.NET Core 跨平臺筋栋。
.NET Core 構(gòu)成體系如下:
1. Runtime
在.NET Core 中有實(shí)現(xiàn)兩種RunTime,NativeRuntime 和 CoreCLR正驻。NativeRuntime 將C# 或 VB.net 代碼直接轉(zhuǎn)換為原生機(jī)器碼弊攘。而CoreCLR是一個開源的JIT運(yùn)行時,會將代碼編譯成中間語言(IL)在最終運(yùn)行時再轉(zhuǎn)換機(jī)器碼姑曙。
2. Unified BCL
Base Classlibrary即基礎(chǔ)類襟交,例如 FileSystem、Console伤靠、XML操作等捣域。
3. Windows Store AppModel & ASP.NET Core 1.0
提供開發(fā)Windows系統(tǒng)的各種觸屏設(shè)備和ASP.NET程序的一組基礎(chǔ)庫。
三 .NET Core 與 .NET 其他Framework的關(guān)系
1 .NET Core & .NET Framework
.NET Core & .NET Framework 都是 NET Standard Library 的實(shí)現(xiàn),一種是跨平臺竟宋,而另一種是Windows下特有的提完,除實(shí)現(xiàn)NET Standard Library外 .NET Core 和 .NET Framework 都有各自特有的實(shí)現(xiàn)。.NET Standard Library 是跨操作系統(tǒng)的關(guān)鍵所在丘侠,它定義了一組接口徒欣,而每個操作系統(tǒng)有各自的實(shí)現(xiàn),.NET Core通過nuget可以動態(tài)下載當(dāng)前操作系統(tǒng)的實(shí)現(xiàn)蜗字,從而實(shí)現(xiàn)跨操作系統(tǒng)(暨跨操作系統(tǒng)共享代碼)打肝。
.NET Core 更依賴于Nuget,允許本地application在部署時動態(tài)下載需要的class library。而.NET Framework需要在系統(tǒng)中預(yù)裝挪捕。這樣.NET Core的部署比.NET Framework 更簡單快速同樣也更輕便粗梭。
2 .NET Core & ASP.NET
從上圖可以看到 ASP.NET Core 有兩種形態(tài)的存在:
ASP.NET Core Web Application(.NET Core)
依賴于.NET Core的ASP.NET 只可以調(diào)用.NET Core的API,可以在多個操作系統(tǒng)上運(yùn)行级零。(可見下圖下半部分的Reference Manager断医,在assemblies中沒有.NET Framework 中的庫)
ASP.NET Core Web Application(.NET Framework)
依賴于.NET Core & .NET Framework 的ASP.NET 可以調(diào)用.NET Core&.NET Framework的API ,只可以在Windows下運(yùn)行奏纪。(可見下圖上半部分的Reference Manager鉴嗤,在assemblies中含有所有.NET Framework 中的庫)
3 .NET Core & Mono
Mono是.NET Framework的開源版本的實(shí)現(xiàn),在某些特性上和.NET Core 很類似比如開源序调,跨操作系統(tǒng)醉锅。目前.NET CORE 會從Mono上吸取經(jīng)驗(yàn),發(fā)展壯大最終可以更好的在除Windows外的其他操作系統(tǒng)上運(yùn)行发绢。另外Mone支持的App Models要比.NET Core多(例如Windows Forms)硬耍。
總結(jié)
微軟CEO薩提亞·納德拉睿智的決定拋棄以PC為中心,擁抱各種設(shè)備和平臺边酒,成為一家軟件服務(wù)型企業(yè)经柴。為了達(dá)成這種愿景必須構(gòu)建新的微軟生態(tài)鏈,囊括Windows,Linux,OS X及其他操作系統(tǒng)甚纲,覆蓋X86/ARM等處理器以及不同的設(shè)備(包括PC,Phone,全息眼鏡及其他)口锭。這些足見微軟的“野心”。隨著.NET Core 正式發(fā)布大戰(zhàn)略邁出堅(jiān)實(shí)的一步介杆,6月27日讓我們拭目以待吧鹃操。
參考內(nèi)容
【1】 https://blogs.msdn.microsoft.com/dotnet/2014/12/04/introducing-net-core/
【2】 https://www.linkedin.com/pulse/too-many-net-jargons-net-what-balaje-sankar
【3】 https://blogs.msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core/