.NET標準
.NET標準(英語:.NET Standard),原稱為.NET平台標準(英語:.NET Platform Standard)是微軟為跨平台所規劃的.NET Framework相關平台於系統之間的相依性標準,在此標準之下,能確保標準的應用程式介面與物件能夠跨平台使用[註 1]。.NET平台標準是以參考組件的方式存在[註 2],其本身並沒有任何實作,真正的實作是由平台擁有者所進行[註 3],而用戶端使用簡單的NuGet版本戳記即可獲得正確的平台版本[註 4]。
歷史
.NET Framework長期以來一直是微軟視窗平台上的特色與標準,它也成功的實作跨微軟視窗平台的應用程式介面,但最為人詬病的一點是它無法跨出微軟視窗平台,雖然有Mono這樣的Framework可跨平台,但是Mono畢竟不是官方實作,在.NET相容性上也無法達到百分之百相容,而在微軟以.NET Core與ASP.NET Core投入真正跨平台的架構與框架開發時,勢必要面臨這個問題。
.NET平台標準的基礎是.NET Framework上的可攜式類別庫[註 5],但為它賦與了更標準的作法以及更容易識別的版本戳記。
.NET平台標準的原理如下所示[1]:
- 平台擁有者自詳細的.NET平台標準版本中實作參考組件。
- 平台擁有者可能會自詳細的.NET平台標準版本實作參考組件的子集[註 6]。
- 任何.NET平台標準參考組件中的API表層變更都會影響版本。
- 低版本的組件總是會相容於高版本。
運作方式
.NET平台標準由微軟提供參考組件,目前的參考組件置於微軟的CoreFX儲存庫[2],每一個定義的命名空間與類別都有一個ref資料夾,裏面即是預設的實作碼,所有參與.NET平台標準的實作者都必須要實作這些屬性與方法,才能相容於.NET平台標準,而CoreFX也有提供實作碼,供實作的參考之用,在大多數的情況,各平台的差異性並不高。
當函式庫已實作成.NET平台標準相容的函式庫後,用戶端就可以使用目標平台別稱(Target Platform Moniker,TPM)來加入其參考,其命名規則是portable-a+b+c+d+...,portable表示它是可攜式的類別庫,a, b, c, d則是要支援的平台別:[3]
平台 | 定址名稱 | 說明 |
---|---|---|
.NET Framework | net | 針對Windows與Windows Server的.NET Framework版本,通常是以.NET Framework版本戳記為主,並省略小數點。
|
Microsoft Store(Windows 應用商店) | netcore | 使用於Windows Store App開發的.NET Framework版本。
|
.NET Micro Framework | netmf | 對.NET Micro Framework(頁面存檔備份,存於互聯網檔案館)的支援。 |
Windows | win | 使用於Windows Store App開發。
|
Silverlight | sl | 對應於Silverlight。
|
Windows Phone | wp | 對應於Windows Phone平台。
|
DNX | dnx | 對應於ASP.NET Core for Windows(但可預見的未來可能會被netcore取代)。 |
DNX Core | dnxcore | 對應於ASP.NET Core for Core CLR(但可預見的未來可能會被netcore取代)。 |
Universal Windows Platform | uap | 對應於Windows 10的UWP平台。uap對應於uap10、uap10 = Windows 10。 |
.NET Standard | netstandard |
|
.NET Core | netcoreapp |
|
.NET | net |
|
Tizen | tizen |
|
已取消的平台 | aspnet50 aspnetcore50 winrt |
版本
.NET平台標準使用netstandard來代表一個平台的標準,用戶端直接使用netstandard來獲取平台的功能,目前各平台對應的.NET平台標準有[1][4][5][6]:
目標平台 | 1.0 | 1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 | 2.0 | 2.1 |
---|---|---|---|---|---|---|---|---|---|
.NET Core | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0 |
.NET Framework (使用v1之工具時)[7] | 4.5 | 4.5 | 4.5.1 | 4.6 | 4.6.1 | 4.6.2 | vNext | 4.6.1 | |
.NET Framework (使用v2之工具時)[8] | 4.5 | 4.5 | 4.5.1 | 4.6 | 4.6.1 | 4.6.1 | 4.6.1 | 4.6.1 | |
Mono | 4.6 | 4.6 | 4.6 | 4.6 | 4.6 | 4.6 | 4.6 | 5.4 | 6.4 |
Xamarin.iOS | 10.0 | 10.0 | 10.0 | 10.0 | 10.0 | 10.0 | 10.0 | 10.14 | 12.16 |
Xamarin.Mac | 3.0 | 3.0 | 3.0 | 3.0 | 3.0 | 3.0 | 3.0 | 3.8 | 5.16 |
Xamarin.Android | 7.0 | 7.0 | 7.0 | 7.0 | 7.0 | 7.0 | 7.0 | 8.0 | 10.0 |
Universal Windows Platform | 10.0 | 10.0 | 10.0 | 10.0 | 10.0 | 10.0.16299 | 10.0.16299 | 10.0.16299 | TBD |
Unity | 2018.1 | 2018.1 | 2018.1 | 2018.1 | 2018.1 | 2018.1 | 2018.1 | 2018.1 | 2021.2 |
Windows | 8.0 | 8.0 | 8.1 | ||||||
Windows Phone | 8.1 | 8.1 | 8.1 | ||||||
Windows Phone Silverlight | 8.0 |
.NET平台標準的版本戳記為netstandardx.y,其中x表示主版號y表示副版號,例如netstandard10 = .NET Standard 1.0、netstandard1.5 = .NET Standard 1.5。
對應於可攜式的版本
.NET平台標準對應到之前的可攜式類別庫的版本戳記,若用戶端需要特別針對特定的平台版本進行對應時,可以使用import的功能匯入(這是供.NET Core應用程式的功能)。
可攜式版本參考 | .NET平台標準版本 |
---|---|
.NET Framework 4.5, Windows 8 | 1.1 |
Windows 8.1, Windows Phone Silverlight 8.1 | 1.0 |
Windows 8.1, Windows Phone 8.1 | 1.2 |
.NET Framework 4.5.1, Windows 8.1 | 1.2 |
.NET Framework 4.5, Windows Phone Silverlight 8 | 1.0 |
.NET Framework 4.5, Windows 8, Windows Phone Silverlight 8 | 1.0 |
Windows Phone 8.1, Windows Phone Silverlight 8.1 | 1.0 |
.NET Framework 4.5, Windows 8, Windows Phone 8.1 | 1.1 |
.NET Framework 4.5.1, Windows 8.1, Windows Phone 8.1 | 1.2 |
Windows 8.1, Windows Phone 8.1, Windows Phone Silverlight 8.1 | 1.0 |
.NET Framework 4.5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8 | 1.0 |
針對Mono以及Xamarin等平台,平台標準的起始為1.4(版本戳記為netstandard1.4)[3]
支援工具
目前可使用netstandard版本別稱的平台僅有.NET Core以及ASP.NET Core,但未來會擴及其他工具。
下列工具為預定支援 netstadard 版本別稱的工具[5]:
- Visual Studio 2022
- Visual Studio 2019
- Visual Studio 2017(版本 15.3 或更高版本)
- Visual Studio 2015(必須加入NuGet擴充套件)。
- Visual Studio 2013(必須加入NuGet擴充套件)。
- Visual Studio 2012(必須加入NuGet擴充套件)。
- NuGet CLI(指令列介面) 3.x
- NuGet CLI 2.x
- .NET CLI
- Xamarin Studio
註釋
參考資料
- ^ 1.0 1.1 .NET Platform Standard. [2016-05-15]. (原始內容存檔於2016-05-19).
- ^ CoreFX 儲存庫. [2016-05-15]. (原始內容存檔於2018-07-03).
- ^ 3.0 3.1 Target Frameworks. [2022-08-27]. (原始內容存檔於2016-05-13).
- ^ dotnet/standard, .NET Platform, 2022-08-22 [2022-08-27], (原始內容存檔於2022-08-27)
- ^ 5.0 5.1 gewarren. .NET Standard. docs.microsoft.com. [2022-08-27]. (原始內容存檔於2022-08-27) (中文(中國大陸)).
- ^ .NET Standard | Common APIs across all .NET implementations. Microsoft. [2022-08-27]. (原始內容存檔於2022-11-19) (美國英語).
- ^ .NET Standard. [2017-05-11]. (原始內容存檔於2017-02-05).
- ^ .NET Standard Versions. [2017-05-11]. (原始內容存檔於2017-08-05).