.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).