微软Ignite 2016 新名词:.NET Standard 2.0

时间:2021-09-30 13:13:00

作者:admin

来源:系统部落

这几天(9月26日-30日)微软Ignite 2016(去年起由 Ignite 取代 TechEd)正在美国如火如荼的召开,乍见一个新名词:.NET Standard 2.0。 我得了一种听到新名词就会焦虑的病,赶紧查数据压压惊…

  .NET Team Blog 同步发布了一篇介绍文,可说是目前最详细最权威的数据源,抱着懂个大概就好的心态,整理重点如下。

  先用两张图说明为什么没事要搞出一套 .NET Standard 新标准? (注:图片取自 MSDN Blog 文章)

  .NET Standard 的核心使命在于解决 .NET 跨平台时基础链接库不一致的问题。.NET 发展至今,已初步实现跨平台, 用 C# 就可以写 Windows、macOS、Linux、iOS、Android 程序。 但如下图所示,.NET Framework BCL、.NET Core Library 与 Xamarin 的 Mono Class Library 各自发展,缺乏统一的界面标准,像是System.Collections, System.IO, System.Xml… 这类性质的基础类别,各家支持程度不一,某些 API 可能在某个平台不存在,又或者 API 界面存在差异。

  微软Ignite 2016 新名词:.NET Standard 2.0

  如果你只专注一种平台,当然可以无视各平台基础链接库的差异,专心学好一种就好。 但如果系统被要求跨平台,差异那怕再小,都会跑出来咬你屁股。 首先,你必须搞懂不同平台的差异,第二,差异提高“跨平台共同链接库/组件”开发的难度。 (脑海中出现一堆恶心的 #if NETCORE … #elif XAMARIN … #endif) 。

  过去针对跨平台共享链接库的主推做法是PCL(Portable Class Library),取多个平台的交集,筛选保留各平台都支持的 API,但开发者仍需知道不同平台的差异。.NET Standard 则试图规范一套标准基础链接库 API 界面,各平台依此界面实作出一致的链接库,如此程序代码不需修改即可针对不同平台编译、执行。

  微软Ignite 2016 新名词:.NET Standard 2.0

  即使有 .NET Standard,还是无法逃避各平台支持度不一的现况。.NET Standard 版本号码与 API 完整度成正比,与支持平台范广度成反比。.NET Standard 2.0提供的 API 数目一定比 1.0 多,但如果想涵盖 Windows Phone 8.1,就只能选择 .NET Standard 1.0 – 1.2。 dotnetstd-2

  微软Ignite 2016 新名词:.NET Standard 2.0

  随着 .NET Standard 2.0 制定,.NET Core 与 Xamarin 将在新版加入支持,而 .NET Framework 4.6.1 则已符合 2.0 标准。 有没有注意上表的玄机?.NET Standard 1.4 对应到 .NET Framework 4.6.1、1.5 对 4.6.2,结果 2.0 又倒车回到 4.6.1,原来是基于部署普及率考虑,.NET Standard 2.0 拿掉 1.5/1.6 增加但应用不广的 API,好让 .NET Framework 4.6.1 符合 .NET Standard 2.0。 各位同学,今天我们要介绍的成语是-“削足适履”~(笑 )

  以下是 .NET Standard 2.0 的主要涵盖范围,细节则参考 github 上的文件。 .NET Standard 2.0 仍在发展中,未来可能还会有变动。

  微软Ignite 2016 新名词:.NET Standard 2.0

  至于一些与平台高度相关的 API,例如:只有 Windows 才有的 Registry、Reflection Emit 功能不适用 .NET Native、UWP、Xamarin iOS。.NET Standard 采取“需额外安装 NuGet Package 才能使用,在不适用平台执行时抛出例外”的原则,不同的 API 处理方式不一。

  如果你需要开发跨平台链接库,官方建议改走 .NET Standard,以降低平台相依性,并允许混合参照 PCL 及 .NET Framework,但 PCL 仍适用特定场合,例如:某些平台不在 .NET Standard 支持之列,PCL 是唯一解。 实作上有个 API Port可侦测程序适用的最低 .NET Standard 标准,再配合检查目标平台是否在该标准支持范围,以便决定标准版本。

  完整的 .NET Standard 工具支持将内置于下一版本 Visual Studio “Dev 15″,以 NuGet Package 方式加入参照,而未来 Visual Studio、VSCode、Xamarin Studio 均会提供一线支持。

相关推荐

评论加载中...
提取码
XGZS
关闭 前往下载

官方交流群