天天看點

.NET Standard 2.0 新版标準:整齊劃一的目标

最近結束的.net connect 2016大會上,幾位微軟mvp針對.net标準的内容和未來發展談論了自己的看法。

在兩個月前公布.net standard 2.0時,微軟認為新版标準的目标在于為現有的三個主要.net平台:.net framework、.net core,以及xamarin提供一個堅實的底層基礎,并為未來滿足樹莓派或iot等全新類型裝置需求可能需要建立的分支提供支援。

對開發者來說,目前現有三個分支最主要的問題在于難以清楚地知道每個平台具體有哪些功能可用,這個問題會顯得極為不便。.net開發者gaprogman認為,這會導緻開發者過度使用條件編譯(conditional compilation),此外他還補充說portable class library(pcl)已經不再那麼易于移植了,因為開發者無法輕松確定自己需要的api在目标平台上依然可用。根據微軟的介紹,使用.net standard取代pcl作為編寫多平台.net庫的底層基礎可以解決這一問題。

然而微軟mvp rick strahl指出,.net standard應當被視作一種用于描述“至少在api接口方面需要選擇哪一具體的實作,例如.net core、mono、xamarin或.net 4.6”的規範。換句話說,.net standard本身并非一種實作,而是由.net底層平台實作的。例如他認為,.net core實作了目前版本的.net standard 1.6版,而他認為.net core 1.2将非常接近.net standard 2.0,使其成為.net standard 1.6的超集。

為了解釋.net standard 2.0到底是什麼,strahl将其與核心的.net base class library(bcl)在核心作業系統、運作時,以及語言服務方面進行了對比。其中包括基本類型系統、運作時的加載和查詢操作、網絡和檔案i/o,以及一些額外的api,例如system.data。此外還對比了并非.net standard标準的一部分,但基于該标準建構的應用程式架構,例如asp.net、winforms、wpf等。

.NET Standard 2.0 新版标準:整齊劃一的目标

從實作的角度來看,.net standard采取了與傳統.net略微不同的方法。實際上.net standard針對每個特定平台的實作還提供了可充當類型轉發器(type forwarder)的.net standard dll。應用程式隻需要引用類型提供程式(type provider)dll,即可将引用轉發給能提供所需實作的相應程式集(assembly)。相比.net程式集,這種做法提供了類似的使用者體驗,但在實施者(implementer)方面有很大不同,因為它們可以分别提供獨立的程式包,而非像.net運作時程式包那樣提供一個單一的整體。

.net standard 2.0将.net standard 1.6 api的範圍增大了不止兩倍,預計将于2017年1季度末釋出,并且有可能在正式釋出前首先提供預覽版本。

繼續閱讀