最近結束的.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采取了與傳統.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季度末發布,并且有可能在正式發布前首先提供預覽版本。
查看英文原文:.NET Standard 2.0: Setting Expectations Straight