- ASP.NET Core項目開發實戰入門
- 張劍橋編著
- 5字
- 2020-09-25 13:00:56
第3章 .NET Standard
3.1 .NET Standard介紹
.NET Standard是一種規范,是所有.NET平臺必須實現的一組API。我們可以把.NET Standard視為適用.NET的POSIX(可移植操作系統接口)。
.NET Standard可實現以下重要情境:
●為所有.NET實現定義一組統一的、與工作負荷無關的BCL API。
●使開發人員能夠通過同一組API生成可在各種.NET實現中使用的可移植庫。
●減少甚至消除由.NET API導致的對共享源代碼進行的條件性編譯(僅適用于OS API)。
各種.NET實現以特定版本的.NET Standard為目標。每個.NET實現版本都會公布它支持的最高.NET Standard版本,這種聲明意味著它也支持以前的版本。例如,.NET Framework 4.6實現.NET Standard 1.3。也就是說,它會公開在.NET Standard版本1.0到1.3中定義的所有API。同理,.NET Framework 4.6.1實現.NET Standard 1.4,而.NET Core 1.0則實現.NET Standard 1.6。
3.1.1 版本
表3-1列出了支持每個.NET Standard版本的最低平臺版本。
表3-1

說明如下:
●N/A表示.NET Framework不支持.NET Standard 2.1或更高版本。
●各單元格中的版本號指示要定向到此.NET Standard版本所需的最低實現版本。
若要查找可以定位的.NET Standard最高版本,則按照以下步驟操作即可:
①查找要運行的.NET實現所在的行。
②在這一行中,從右向左查找可以定位的.NET Standard版本所在的列。
③列標題指示目標支持的.NET Standard版本。
④對要定位的每個平臺重復執行此過程。如果有多個目標平臺,則選擇它們都支持的最高版本。例如,如果要在.NET Framework 4.5和.NET Core 1.0上運行,則可以使用的最高.NET Standard版本是.NET Standard 1.1。
1.應使用哪個.NET Standard版本
在選擇.NET Standard版本時,應權衡以下因素:
●版本越高,可使用的API越多。
●版本越低,可實現的平臺越多。
通常,建議盡可能使用最低版本的.NET Standard。因此,在找到可以指向的最高版本.NET Standard后,請按照以下步驟操作:
①指向前一更低版本的.NET Standard,然后生成項目。
②如果成功生成項目,則重復執行第①步。否則,重新指向下一個較高的版本,這就是應該使用的版本。
但是,針對較低版本的.NET Standard會引入許多支持依賴項。如果項目面向.NET Standard 1.x,則建議同時使用.NET Standard 2.0。這簡化了在.NET Standard 2.0上運行的庫用戶的依賴項關系,并減少了需要下載的軟件包數量。
2..NET Standard版本控制規則
版本控制規則主要有兩個:
●累加性:.NET Standard版本在邏輯上形成同心圓。也就是說,較高的版本包含較低的版本的所有API。版本之間沒有重大更改。
●不可變:一旦發布,.NET Standard版本就會被凍結起來。新API首先會在特定的.NET實現(如.NET Core)中可用。如果.NET Standard評審委員會認為新API可應用于所有.NET實現,則會將它們添加到新的.NET Standard版本中。
3.1.2 規范
.NET Standard規范是一組標準化的API,此規范由.NET實現者進行維護,具體來說,就是由Microsoft(包括.NET Framework、NET Core和Mono)和Unity進行維護。
1.正式規范
正式規范是一組用于定義標準中包含API的.cs文件。dotnet/standard倉庫中的Ref目錄定義了.NET Standard API。
NETStandard.Library元包描述用于部分定義一個或多個.NET Standard版本的庫集。
給定的組件(如System.Runtime)描述如下:
●.NET Standard的一部分(即其范圍)。
●.NET Standard在此范圍內的多個版本。
標準庫提供派生項目以方便讀取,并實現某些開發人員方案(例如,使用編譯器):
●Markdown中的API列表;
●引用程序集,以NuGet包的形式分發,由NETStandard.Library元包引用。
2.包表示形式
.NET Standard引用程序集的主要分發載體是NuGet包。NuGet包面向一個或多個框架,其定位是“.NET Standard”框架。可以使用netstandard精簡TFM(例如netstandard1.4)來設定.NET Standard框架作為目標。如果構建的庫將在多個運行時上運行,則應將此框架作為目標。對于最廣泛的API集,可將netstandard2.0設定為目標,因為.NET Standard 2.0的可用API數量比.NET Standard 1.6的兩倍還多。
NETStandard.Library元包引用定義.NET Standard的一整套NuGet包。要指定netstandard作為目標,最常見的方法是引用此元包。它描述并提供了對大約40個.NET庫及定義.Net Standard的相關API的訪問權限。可以引用以netstandard為目標的其他包來使用其他API。
3.版本管理
規范并不是單一的,而是一組版本不斷呈線性遞增的API。該標準的第一個版本建立了一組基準API。后續版本將添加API,并繼承以前版本定義的API。在從標準中移除API方面,并沒有成文的規定。
.NET Standard并不特定于任何一種.NET實現,也不與其中任一運行時的版本控制方案匹配。
添加到任何實現(例如.NET Framework、.NET Core和Mono)的API可被視為適合添加到規范中的候選項,尤其是本質上非常重要的API。.NET Standard的新版本根據.NET實現版本進行創建,以便可以定位.NET Standard PCL中的新API。.NET Core版本控制中詳細介紹了版本控制機制。
.NET Standard版本控制對于庫的使用至關重要。在.NET Standard版本既定的情況下,可以使用指向相同或更低的版本的庫。下面介紹使用.NET Standard PCL(專用于.NET Standard定位)的工作流程。
●選擇要用于PCL的.NET Standard版本。
●使用依賴相同或更低.NET Standard版本的庫。
●如果發現依賴更高.NET Standard版本的庫,要么采用相同的版本,要么不要使用此庫。
3.1.3 .NET Framework兼容性模式
從.NET Standard 2.0開始,引入了.NET Framework兼容性模式。此兼容性模式允許.NET Standard項目引用.NET Framework庫,就像其針對.NET Standard編譯一樣。引用.NET Framework庫并不適用于所有項目,例如使用Windows Presentation Foundation(WPF)API的庫。
3.1.4 .NET Standard庫和Visual Studio
要在Visual Studio中生成.NET Standard庫,請確保在Windows系統上已安裝Visual Studio 2017的15.3版本或更高版本,或在macOS上已安裝Visual Studio for Mac的7.1版本或更高版本。
如果項目中只需使用.NET Standard 2.0庫,也可以在Visual Studio 2015中執行此操作。但是需要安裝NuGet Client 3.6或更高版本。可以從NuGet下載頁面下載適用Visual Studio 2015的NuGet客戶端。
3.1.5 .NET Standard圖解
圖3-1形象地描述了.NET Standard。

圖3-1
從圖3-1中可以看出,.NET Standard適用于WPF、Windows Forms、ASP.NET、UWP、ASP.NET Core,基于Xamarin支持iOS、OS X和Android。
- Axure RP8入門手冊:網站和App原型設計從入門到精通
- 這就是搜索引擎
- RocketMQ技術內幕:RocketMQ架構設計與實現原理
- 分析信息:香農、維特根斯坦、圖靈和喬姆斯基對信息的兩次分離
- 華為云計算HCIA實驗指南(第二版)
- Adobe XD界面設計與原型制作教程(全彩)
- Axure RP 9 高保真原型設計實例教程
- 信息主導論
- 計算機網絡
- 深度學習:主流框架和編程實戰
- 阿里云云原生架構實踐
- Wireshark網絡分析從入門到實踐
- 信息安全技術
- Google Plus First Look:a tip-packed,comprehensive look at Google+
- Mastering SaltStack