【译】DotNet 5.4或者说 .NET平台标准

时间:2021-07-27 03:38:40

原文:DotNet 5.4 or .NET Platform Standards

【译】DotNet 5.4或者说 .NET平台标准

是的,你看到的确实是“DotNet 5.4”。使用Visual Studio 2015 RC1 update来创建一个NuGet类库。并且来看一下Project.json文件,你将会惊异于在frameworks配置节中看到了“DotNet 5.4”。最近ASP.NET 5 被重命名为ASP.NET Core 1.0,那么这个DotNet 5.4是从何而来呢?他们还没有发布ASP.NET Core 1.0release RC 2版本,我很可能有这样的疑问“我真的错失了Dotnet 5.1到5.3的发布版吗?”。

Project.json文件的截图如下。注意framework配置节。

【译】DotNet 5.4或者说 .NET平台标准

到底什么是DotNet 5.4

最近当ASP.NET 5被重命名ASP.NET Core 1.0时,它引起了.NET社区的广泛关注,但是微软又用“DotNet 5.4”造成了困惑。好吧,“DotNet 5.4”对于你现在正在生成和编译应用程序用的框架来说,它不是一个真正的框架。它是“平台别名”,一个新的被称为.NET平台标准原文:.NET Platform Standard,以下均指代这个术语)。

那.NET平台标准又是什么呢?

在我们研究.NET平台标准之前,理解“为什么”是一个新标准是很重要的。好的,新标准就是把所有不同的别名(.NET,Windows,Windows Phone,Mono,.NET Core,等等)都统一到一个单独的别名之下。它的创建用一个易于理解的平台版本计划,来对未来.NET可能出现的平台进行二进制代码移植,提供了一个更具体的确保(原文是:It is created to provide a more concrete guarantee of binary portability to future .NET-capable platforms with an easier-to-understand platform versioning plan.)。二进制代码可移植性是通过PCL(Portable class library)来实现。

对于不熟悉PCL的读者简单说一下,PLC是在Visual Studio中的一个项目类型。这种类型的项目能生成一个被一组平台引用的二进制程序集。所以,当你创建一个PCL项目时,将会询问你目标平台有哪些。

【译】DotNet 5.4或者说 .NET平台标准

PCL程序集仅能运行在选定的框架上。我们拿上面图片举例子,这个PCL项目将会运行在.NET Framework 4.6、ASP.NET Core 1.0和Windows Universal 10.0这三个平台上。在PCL术语中,用别名词汇(译者注:原文是the term moniker,我的理解就是指ASP.NET Core 1.0之类的名称)来定义平台。在上面的例子中有3个不同的别名。而问题在于,如果明天出现一个新的平台,那么之前创建的PCL项目就无法与之适配。它需要通过在目标平台列表中增加新的平台,并重新发布类库的一个新版本来实现与之适配。所以PCL用一个预定义的别名列表来定义目标平台。

解决这一问题之道就是.NET平台标准。在这一新的解决方式中,有一个单独的别名。所以类库不再是别名的组合。记住,.NET平台标准就其本身而言并不是一个平台。它是实现平台的一个标准。

要理解它的实现机制,请看下面的表格。

【译】DotNet 5.4或者说 .NET平台标准

上面的列表是最新的,但是当初一开始发布它的时候,“netstandard"这个别名是”dotnet",并且版本号是5.1到5.4,而不是图片中的1.0到1.4,所以就是那时引入了DOTNET 5.4这个概念。尽管开发团队更改了这个表格,但是在模板代码中依然没变(译者注:原文是but reference in code is still there,就是指创建一个NuGet类库项目时,VisualStudio使用的项目模板中的代码,也就是Project.json这个文件的代码中framework这个配置节中的内容)。随着ASP.NET Core 1.0 RC 2的发布,这里应该会被改为netstandard。

如何理解这个表格

  • 如果一个类库指定.NET平台标准1.3版本,那么它仅能够运行在.NET Framework 4.6或更新的框架、Universal Windows Platform 10(UWP)、DNX Core 5.0和Mono/Xamarin这些平台上。
  • 如果一个类库指定.NET平台标准1.3版本,那么它能够引用(原文:consume)所有来自之前的.NET平台标准的版本(1.2、1.1、1.0)。

总结

随着ASP.NET Core 1.0的发布越来越近,一切都会确定下来并步入正轨。在命名上频繁改动的尴尬已经被处理,.NET正在改变,并且被看作是一个平台(这一句原文是:The name dilemma is already addressed .NET is changing and it can be considered as a platform.)。“.NET平台标准”正在迈向真正的在二进制层面做到可移植的时代。

就这样了,各位。请关注这个博客并在你的社交网络中分享它。同时也请你在评论区留下你的建议和反馈。

原文:DotNet 5.4 or .NET Platform Standards