.NET Core和.NET Standard有什麼不一樣

 

近日,微軟發佈了.NET Core 2.0,可是開發人員中間仍然存在一些疑惑,就是.NET Core、.NET Standard、Xamarin和.NET Framework有什麼不一樣git

.NET Framework用於構建桌面應用程序和運行在互聯網信息服務器(IIS)上的ASP.NET應用程序。它是第一個託管框架。github

Xamarin是一個用於構建iOS、Android、macOS和桌面應用程序的框架。瀏覽器

.NET Core服務器

.NET Core是免費、跨平臺的,是託管框架的開源實現。它支持4種類型的應用程序:控制檯、ASP.NET Core、雲和通用Windows平臺(UWP)。Windows FormsWindows Presentation Foundation(WPF)並不包含在.NET Core中。網絡

從技術上講,.NET Core僅支持控制檯應用程序。ASP.NET Core和UWP是以.NET Core爲基礎構建的應用程序模型。app

與.NET Framework不一樣,.NET Core沒有做爲Windows組件考慮。所以,更新是以NutGet包的形式,而不是經過Windows Update。因爲.NET Core運行時安裝成了App-Local,而應用程序升級是經過包管理器完成的,因此應用程序能夠關聯特定的.NET Core版本以及單獨升級。框架

.NET Standard工具

託管框架的每一種實現都有一套本身的基類庫。基類庫(BCL)包含諸如異常處理、字符串、XML、I/O、網絡和集合這樣的類。優化

.NET Standard是一項實現BCL的規範。因爲.NET實現須要遵循這項規範,因此應用程序開發人員就不用擔憂每一種託管框架實現的BCL不一樣。操作系統

框架類庫(FCL),如WPF、WCF、ASP.NET,不包含在BCL中,所以,也就不包含在.NET Standard中。

.NET Standard與.NET實現之間的關係就和HTML規範與瀏覽器之間的關係同樣。後者是前者的實現。

所以,.NET Framework、Xamarin和.NET Core,每一種託管框架都實現了.NET Standard中的BCL。隨着計算機工業不斷推出新的硬件和操做系統,未來還會出現新的.NET託管框架。該標準讓應用程序開發人員知道,他們能夠依賴於一套始終如一的API。

每一個.NET版本都對應一個.NET Standard版本。

API一致,將應用程序移植到不一樣的託管實現以及提供工具都會更簡單。

.NET Standard被定義爲一個單獨的NuGet包,由於全部的.NET實現都必須支持它。工具變得簡單了,由於對於特定的版本,它們有一套相同的API。你還能夠針對多個.NET實現構建一個庫項目。

你還能夠構建特定平臺API的.NET Standard封裝器。

.NET Standard vs 可移植類庫

可移植類庫作的不是同一件事嗎?

可移植類使用多個平臺均都支持的通用API。所以,支持的平臺越多,可用的API就越少,並且,對於特定的平臺組合,很難知道到底支持哪些API。對於一個新平臺,已有的PCL必須從新編譯。PCL還須要微軟針對每一個平臺建立一個新的框架實現分支。

因爲.NET Standard肯定了API,而不是一個實現,因此不須要從新編譯應用程序。任何新發布的.NET實現都實現了必須的庫。應用程序不須要從新編譯就能夠運行在新的硬件平臺或操做系統上。從理論上講,在調用API時可能會捕獲到NotSupportedException異常,但那種狀況應該不多見。

小結

.NET Standard是一項API規範,每個特定的版本,都定義了必須實現的基類庫。

.NET Core是一個託管框架,針對構建控制檯、雲、ASP.NET Core和UWP應用程序進行了優化。每一種託管實現(如Xamarin、.NET Core或.NET Framework)都必須遵循.NET Standard實現BCL。

原文連接

http://www.infoq.com/cn/news/2017/10/dotnet-core-standard-difference

 

參考資料

https://github.com/dotnet/standard/blob/master/docs/versions.md

相關文章
相關標籤/搜索