在Visual Studio中新建專案的時候,除了.NET Framework和.NET Core之外,我們還會看到.NET Standard的身影,如圖1所示。
在“類庫”專案中,.NET Standard和.NET Core、.NET Framework具有同等地位,但是.NET Standard只在“類庫”專案中出現過,在“控制檯”“Web應用程式”等專案中都沒有它的身影。那麼.NET Standard到底是什麼呢?
圖1 新建專案嚮導在.NET大家庭中有.NET Framework、.NET Core、Xamarin等具體的實現,在這些實現中,有一些其他實現所不具有的特性。比如,.NET Framework中有訪問Windows登錄檔的類,很顯然這是其他實現所不具備的;再如,Xamarin中有撥打電話的類,很顯然這也是其他實現所不具備的。但是這些實現也有一些可以共享的類,比如讀寫檔案的類、List集合類、字串類等。假如每個.NET實現中,這些可以共享的類(也叫“基礎庫”)都有自己的一套做法,如圖2所示,就有可能出現同樣功能的類在不同的實現中各不相同的情況,比如在.NET Framework中操作檔案的類叫FileStream,但是到了.NET Core中對應的類叫Storage。這樣就會帶來一個問題:如果我們想開發一個讀寫檔案的程式碼庫供.NET Framework、.NET Core等使用,程式碼編寫起來就很麻煩了。
反之,如果微軟為檔案操作、集合等所有.NET實現中都具有的部分制定一個規範,無論是.NET Framework、.NET Core還是Xamarin都要遵守這個規範。比如這個規範規定操作檔案的類必須叫FileStream,而且FileStream類必須要有Read、Write、Flush等方法,引數和返回值也必須統一。
這樣編寫通用庫的時候就會簡單很多了。這個“各個實現通用的基礎庫規範”叫作.NET Standard,如圖3所示。
.NET Standard規定了一系列需要被所有.NET Core、.NET Framework及Xamarin等共同實現的API,包括有哪些類、有哪些方法、引數和返回值是什麼等。需要說明的是,.NET Standard只是一個規範,不是一個框架。不要以為.NET Standard是一個被.NET Framework、.NET Core、Xamarin等共用的基礎庫,.NET Standard只是規定了需要被實現的規範,但是不負責具體實現。