最近因為 .NET Core 2.0 的正式發佈,越來越多人開始回頭看原本 .NET framework 的組成,以及各種實作與標準之間的關係;這兩天剛好看了 InfoQ 上的一篇文章 [2];再繼續之前,首先要抓準一個概念:現行的 .NET 平台實作不只 .NET framework 一家,還有 .NET Core, Mono, Xamarin 等等,而各家實作在跨平台的特性與實現方法上也不盡相同,根本原因在於一開始的 CLI standard library 以大鍋菜的方式設計,雖然有 BCL 與 FCL 之分,但 BCL 並未很好地把 Windows dependent 的功能剝離出去,導致後續跨平台 runtime 實作困難。
以下是順手整理的心得:
- .NET Standard 重新定義了 BCL 的標準,讓各家 (.NET Framework, Xamarin, and .NET Core) 實作的 BCL 趨於一致。
- 針對 BCL 之上的 application models,.NET Core 捨棄 Windows Forms 與 Windows Presentation Foundation (WPF),僅保留 Console,並實作 APS.NET Core [3]。
至於 Portable Class Libraries (PCL) 則是針對既有 .NET 平台實作所提的暫時方案;透過 Visual Studio 與 PCL 的幫助,Visual Studio 可自動將程式中 dependency 對應到各家實作的函式,免去開發人員額外偵測與判斷的痛苦。有關 PCL,個人認為 InfoQ 文章中參照的 [4] 寫得比較完整。
附帶一提:當微軟在 2017/8/13 發佈 .NET Standard 文件 [5] 時,裡頭的對應表可能讓人誤以為 .NET framework 4.6.1 就已經實作 .NET Standard 2.0;實際上,在 .NET framework 4.6.1 尚須加裝 .NET Core 2.0 SDK 才能支援,否則會缺少 200 多個 API 實作。因此真正的完整支援要到 .NET framework 4.7.1 才算完成 [7]。
see also:
[1] .NET: Framework or Virtual Machine
[2] InfoQ: .NET Core and .NET Standard: What Is the Difference?
[3] .NET Standard - Demystifying .NET Core and .NET Standard
[4] Understanding .NET Core, .NET Standard, .NET Core applications and ASP.NET Core
[5] Microsoft Docs: .NET Standard
[6] Microsoft .NET Blog: Announcing the .NET Framework 4.7.1
沒有留言:
張貼留言