.Net 生態系統(framework vs core vs xamarin)

引言

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

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

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

dotnet的生態化反圖

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


dotnet生態圖

從上圖, 可以很簡單的發現, .Net體系分為三大塊,

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

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

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

dotnet standard

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

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, 而更多是一個標準, 不同的standard版本其實是對應的不同的API集合. 當然,版本號越小,支持的API越少. 但是支持的API越少,就意味著可以在更多的平臺上運行. 我們開發的功能性類庫應該都是Standard的,而且如果可能,應該使用小版本

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

standard和framework/core/xamarin之間的關系

.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平臺,用于創建運行在任何地方(Windows,Linux和MacOS)的現代Web應用程序,微服務器,庫和控制臺應用程序。它更多的是為后端應用(back-end)準備的,所以core其實和asp.net core捆綁很緊密. 當然core還可以編寫命令行程序, 也就是說我們在linux開發一些工具可以選擇C#了. 這是一個很好選項. :-).

當然core還可以開發UWP的應用,對于UWP不太熟,好像發展的也不咋的.

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

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

xamarin

Xamarin可以開發原生的AndroidiOSMacOS和Windows應用程序(這個還是用wpf/winform更方便)。
Xamarin平臺基于Mono(Mono是來自社區Mono Project的.NET的原始開源和跨平臺實現。)
傳統上,Mono的API遵循.NET Framework的進展,而不是.NET Core。

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

Xamarin提供以下總結功能:

本地用戶界面 - Xamarin應用程序是使用標準的本地用戶界面控件構建的。
應用程序不僅看起來終端用戶期望的方式;
他們也是這樣做的。
本機API訪問 - Xamarin應用程序可以訪問底層平臺和設備公開的全部功能,包括平臺特定功能(如iBeacons和Android Fragments)。
本機性能 - Xamarin應用程序利用特定于平臺的硬件加速,并針對本機性能進行編譯。
在運行時解釋代碼的解決方案無法實現這一點。
生產力 -使用Xamarin.Forms開發人員可以使用與iOS,Android和Windows 10 UWP相同的邏輯和UI。

Xamarin架構圖

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

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

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

dotnet framework

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

它作為Windows操作系統的一部分運行,因此在新版本可用時或通過可選的獨立安裝程序通過Windows Update進行服務。當與Windows一起運送時,Windows 8附帶4.5,Windows 8.1附帶4.5.1,Windows 10附帶4.6。對于服務器,Windows Server 2012附帶4.5,Windows Server 2012 R2附帶4.5.1。

自2002年發布以來,.NET Framework得到了開發人員的廣泛支持,開發人員喜歡其一致的編程模型,易于使用Visual Studio入門的環境,調試和分析工具以及Microsoft的直接支持。它還使應用程序部署和維護直截了當。不過由于windows在服務器端的弱勢, 現在.net其實一直在走下坡路.

在.NET Framework之上建立了多個應用程序堆棧,允許開發人員構建從控制臺應用程序到富客戶機(WPF)應用程序到可擴展Web應用程序的應用程序.Windows FormsWindows Presentation Foundation(WPF)Windows Communication Foundation (WCF)ASP.NET到v4.x,ASP.NET Web窗體ASP.NET MVCASP.NET WebAPISignalR等幾個子框架。

雖然.NET Framework的代碼是開源的,但只是部分開源,社區不活躍..NET Framework將繼續發展,當下一版本的Windows操作系統發布時,通過發送新的更新.
.net framework始終是構建Windows桌面應用程序的最好已經最快的開發框架!

總結

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

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

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

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,570評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,505評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,786評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,219評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,438評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,971評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,796評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,995評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,230評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,697評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容