.Net 生態(tài)系統(tǒng)(framework vs core vs xamarin)

引言

最近, 微軟剛剛發(fā)布.net core 2.0, dotnet世界有了一個新的開始. 但是這里有一些疑問,

  • .net core是不是dotnet的下一個版本? 無論如何asp.net 5直接就變成了asp.net core.
  • 微軟是不是會放棄framework? 還有xamarin是不是會被core替代?
  • 如果我現(xiàn)在用dotnet開發(fā), 應(yīng)該選用core,還是framework,抑或Xamarin?

抱著這樣的疑問, 我仔細探究了一下dotnet目前的生態(tài)系統(tǒng),希望對大家有點幫助.

dotnet的生態(tài)化反圖

經(jīng)過多年的努力,在推出Core以后, 微軟終于做到了當(dāng)初的承諾, 一次編寫到處運行了. 目前dotnet應(yīng)該僅次于javascript了, 除了瀏覽器, dotnet應(yīng)該都可以運行了.


dotnet生態(tài)圖

從上圖, 可以很簡單的發(fā)現(xiàn), .Net體系分為三大塊,

  • 底層支持平臺,包括編譯器,運行時及CSharp/FSharp/VB.Net等
  • 標(biāo)準類庫,統(tǒng)一大部分通用的API
  • 應(yīng)用模型, 適用于不同的操作系統(tǒng)

通過這張圖, 我們可以很清楚的看出.Net Framework, .Net Core, Xamarin, 他們是平行的框架,不是互相取代的關(guān)系.

  • .NET Framework將繼續(xù)在windows世界發(fā)力, 重點會在Desktop UI應(yīng)用方面
  • .NET Core會在UWP及后端應(yīng)用(Back-End)發(fā)力,適應(yīng)現(xiàn)在Linux服務(wù)器滿天飛的現(xiàn)狀.
  • Xamarin 會繼續(xù)在移動平臺發(fā)力,作為一個快速App的工具

dotnet standard

.Net Standard是新推出來用以替代Portable, Standard和Portable之間,按照我的理解是替代關(guān)系, 將來Portable將慢慢消亡. Portable和Standard的關(guān)系如下表:

PCL Profile .NET Standard PCL Platforms
Profile7 1.1 .NET Framework 4.5, Windows 8
Profile31 1.0 Windows 8.1, Windows Phone Silverlight 8.1
Profile32 1.2 Windows 8.1, Windows Phone 8.1
Profile44 1.2 .NET Framework 4.5.1, Windows 8.1
Profile49 1.0 .NET Framework 4.5, Windows Phone Silverlight 8
Profile78 1.0 .NET Framework 4.5, Windows 8, Windows Phone Silverlight 8
Profile84 1.0 Windows Phone 8.1, Windows Phone Silverlight 8.1
Profile111 1.1 .NET Framework 4.5, Windows 8, Windows Phone 8.1
Profile151 1.2 .NET Framework 4.5.1, Windows 8.1, Windows Phone 8.1
Profile157 1.0 Windows 8.1, Windows Phone 8.1, Windows Phone Silverlight 8.1
Profile259 1.0 .NET Framework 4.5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8

有一點需要特別說明, standard并不算一個libarary, 而更多是一個標(biāo)準, 不同的standard版本其實是對應(yīng)的不同的API集合. 當(dāng)然,版本號越小,支持的API越少. 但是支持的API越少,就意味著可以在更多的平臺上運行. 我們開發(fā)的功能性類庫應(yīng)該都是Standard的,而且如果可能,應(yīng)該使用小版本

如dotnet生態(tài)圖的Base Libraries層可以看出, .Net標(biāo)準庫更像一個墊片層(Adaper設(shè)計模式),用來調(diào)用具體平臺相關(guān)的實現(xiàn)庫, 比如在windows平臺就調(diào)用.Net Framework 類庫, 在Linux上就調(diào)用CoreFx類庫,而在移動平臺則調(diào)用Mono類庫.

standard和framework/core/xamarin之間的關(guān)系

.NET Standard 1.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0
.NET Core 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.0
.NET Framework (with .NET Core 1.x SDK) 4.5 4.5 4.5.1 4.6 4.6.1 4.6.2
.NET Framework (with .NET Core 2.0 SDK) 4.5 4.5 4.5.1 4.6 4.6.1 4.6.1 4.6.1 4.6.1
Mono 4.6 4.6 4.6 4.6 4.6 4.6 4.6 5.4
Xamarin.iOS 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.14
Xamarin.Mac 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.8
Xamarin.Android 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.5
Universal Windows Platform 10.0 10.0 10.0 10.0 10.0 vNext vNext vNext
Windows 8.0 8.0 8.1
Windows Phone 8.1 8.1 8.1
Windows Phone Silverlight 8.0

dotnet core

.NET Core是一個新版本的.NET轻庆,它是一個跨平臺鸽心,開源和模塊化的.NET平臺虹统,用于創(chuàng)建運行在任何地方(Windows璧亚,Linux和MacOS)的現(xiàn)代Web應(yīng)用程序望蜡,微服務(wù)器,庫和控制臺應(yīng)用程序臼膏。它更多的是為后端應(yīng)用(back-end)準備的,所以core其實和asp.net core捆綁很緊密. 當(dāng)然core還可以編寫命令行程序, 也就是說我們在linux開發(fā)一些工具可以選擇C#了. 這是一個很好選項. :-).

當(dāng)然core還可以開發(fā)UWP的應(yīng)用,對于UWP不太熟,好像發(fā)展的也不咋的.

  • core和原來的framework一個很大的區(qū)別是core所用的類庫可以單獨打包,并且可以把所有依賴項打包在一起, 發(fā)布core的應(yīng)用可以不要求目標(biāo)系統(tǒng)安裝有dotnet的運行時了,非常方便發(fā)布了,而且發(fā)布包可以很小.
  • core和docker生態(tài)捆綁緊密,作為微服務(wù)開發(fā)的一個很好的選擇

Core是一個.Net everywahre的唯一平臺,有了core, CSharp經(jīng)驗終于可以應(yīng)用于大部分開發(fā)工作了!

xamarin

Xamarin可以開發(fā)原生的Android直奋,iOSMacOS和Windows應(yīng)用程序(這個還是用wpf/winform更方便)九杂。
Xamarin平臺基于Mono(Mono是來自社區(qū)Mono Project的.NET的原始開源和跨平臺實現(xiàn)颁湖。)
傳統(tǒng)上,Mono的API遵循.NET Framework的進展例隆,而不是.NET Core甥捺。

除了跨平臺的移動設(shè)備,使用Xamarin創(chuàng)建的應(yīng)用程序本身提供與使用Objective-C / Swift / for iOS或Java for Android創(chuàng)建的應(yīng)用程序相似的性能以及還有更大的體積:-( 镀层。

Xamarin提供以下總結(jié)功能:

本地用戶界面 - Xamarin應(yīng)用程序是使用標(biāo)準的本地用戶界面控件構(gòu)建的镰禾。
應(yīng)用程序不僅看起來終端用戶期望的方式;
他們也是這樣做的。
本機API訪問 - Xamarin應(yīng)用程序可以訪問底層平臺和設(shè)備公開的全部功能唱逢,包括平臺特定功能(如iBeacons和Android Fragments)吴侦。
本機性能 - Xamarin應(yīng)用程序利用特定于平臺的硬件加速,并針對本機性能進行編譯坞古。
在運行時解釋代碼的解決方案無法實現(xiàn)這一點备韧。
生產(chǎn)力 -使用Xamarin.Forms開發(fā)人員可以使用與iOS,Android和Windows 10 UWP相同的邏輯和UI痪枫。

Xamarin架構(gòu)圖

在Xamarin的圖中织堂,您可以看到如何在Xamarin.iOS,Xamarin.Android甚至Windows 10的UWP項目之間的平臺上共享客戶端代碼(通常是C#應(yīng)用程序邏輯奶陈,如ViewModels易阳,Models,Service Agents等)吃粒。

如果使用Xamarin.Forms潦俺,您還可以在平臺之間共享相同的UI代碼(Xamarin XAML定義頁面/視圖)。

注意:使用Xamarin徐勃,您還可以開發(fā)Mac(MacOS)應(yīng)用程序事示,但圖中沒有表示,因為Xamarin的主要目的是“跨平臺移動”疏旨。

dotnet framework

NET Framework是一個非常強大而成熟的框架很魂,擁有一個龐大的類庫(稱為.NET Framework Class Library)扎酷,可在Windows上支持各種各樣的應(yīng)用程序和解決方案檐涝。為您現(xiàn)有的應(yīng)用程序和庫提供了最高級別的兼容性。

它作為Windows操作系統(tǒng)的一部分運行,因此在新版本可用時或通過可選的獨立安裝程序通過Windows Update進行服務(wù)谁榜。當(dāng)與Windows一起運送時幅聘,Windows 8附帶4.5,Windows 8.1附帶4.5.1窃植,Windows 10附帶4.6帝蒿。對于服務(wù)器,Windows Server 2012附帶4.5巷怜,Windows Server 2012 R2附帶4.5.1葛超。

自2002年發(fā)布以來,.NET Framework得到了開發(fā)人員的廣泛支持延塑,開發(fā)人員喜歡其一致的編程模型绣张,易于使用Visual Studio入門的環(huán)境,調(diào)試和分析工具以及Microsoft的直接支持关带。它還使應(yīng)用程序部署和維護直截了當(dāng)侥涵。不過由于windows在服務(wù)器端的弱勢, 現(xiàn)在.net其實一直在走下坡路.

在.NET Framework之上建立了多個應(yīng)用程序堆棧,允許開發(fā)人員構(gòu)建從控制臺應(yīng)用程序到富客戶機(WPF)應(yīng)用程序到可擴展Web應(yīng)用程序的應(yīng)用程序.Windows Forms宋雏,Windows Presentation Foundation(WPF)芜飘,Windows Communication Foundation (WCF)ASP.NET到v4.x磨总,ASP.NET Web窗體嗦明,ASP.NET MVCASP.NET WebAPI蚪燕,SignalR等幾個子框架招狸。

雖然.NET Framework的代碼是開源的,但只是部分開源,社區(qū)不活躍..NET Framework將繼續(xù)發(fā)展,當(dāng)下一版本的Windows操作系統(tǒng)發(fā)布時邻薯,通過發(fā)送新的更新.
.net framework始終是構(gòu)建Windows桌面應(yīng)用程序的最好已經(jīng)最快的開發(fā)框架!

總結(jié)

回到開頭的三個問題, 答案應(yīng)該非常清楚了:

  • .Net Framework, .Net Core, Xamarin是三個基于dotnet的三個不同開發(fā)框架應(yīng)用于不同場景, 他們可以通過.Net Standard共享代碼.
  • 微軟是不會放棄framework的,除非微軟放棄windows :-)
  • 我們應(yīng)該根據(jù)具體的開發(fā)場景選擇不同的開發(fā)框架, 具體我的建議是:
  1. 所有的類庫應(yīng)該盡可能使用.net standard,以便在各個平臺共享邏輯代碼
  2. 后端代碼(backend)因盡可能選擇.Net Core, 特別是asp.net應(yīng)該轉(zhuǎn)換到asp.net core
  3. windows的桌面應(yīng)用應(yīng)該選擇framework(UWP還是覺得不靠譜),特別是wpf,是開發(fā)桌面應(yīng)用的一個好選擇.
  4. 移動端的快速原型應(yīng)該選用xamarin.
  5. 工具類的應(yīng)用應(yīng)該選擇.net core

以上是我的個人見解,歡迎大家提出不同看法.

參考文獻: https://blogs.msdn.microsoft.com/cesardelatorre/2016/06/27/net-core-1-0-net-framework-xamarin-the-whatand-when-to-use-it/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末裙戏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子厕诡,更是在濱河造成了極大的恐慌累榜,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灵嫌,死亡現(xiàn)場離奇詭異壹罚,居然都是意外死亡,警方通過查閱死者的電腦和手機寿羞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門猖凛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绪穆,你說我怎么就攤上這事辨泳∈瘢” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵菠红,是天一觀的道長第岖。 經(jīng)常有香客問我,道長试溯,這世上最難降的妖魔是什么蔑滓? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮遇绞,結(jié)果婚禮上键袱,老公的妹妹穿的比我還像新娘。我一直安慰自己摹闽,他們只是感情好杠纵,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钩骇,像睡著了一般比藻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上倘屹,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天银亲,我揣著相機與錄音,去河邊找鬼纽匙。 笑死务蝠,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的烛缔。 我是一名探鬼主播馏段,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼践瓷!你這毒婦竟也來了院喜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤晕翠,失蹤者是張志新(化名)和其女友劉穎喷舀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淋肾,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡硫麻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了樊卓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拿愧。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碌尔,靈堂內(nèi)的尸體忽然破棺而出浇辜,到底是詐尸還是另有隱情券敌,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布奢赂,位于F島的核電站陪白,受9級特大地震影響颈走,放射性物質(zhì)發(fā)生泄漏膳灶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一立由、第九天 我趴在偏房一處隱蔽的房頂上張望轧钓。 院中可真熱鬧,春花似錦锐膜、人聲如沸毕箍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽而柑。三九已至,卻和暖如春荷逞,著一層夾襖步出監(jiān)牢的瞬間媒咳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工种远, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留涩澡,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓坠敷,卻偏偏與公主長得像妙同,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子膝迎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容