微软Ignite 2016 新名词:.NET Standard 2.0
发布时间:2023-06-23 05:41:52
这几天(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 界面存在差异。
如果你只专注一种平台,当然可以无视各平台基础链接库的差异,专心学好一种就好。 但如果系统被要求跨平台,差异那怕再小,都会跑出来咬你屁股。 首先,你必须搞懂不同平台的差异,第二,差异提高“跨平台共同链接库/组件”开发的难度。 (脑海中出现一堆恶心的 #if NETCORE … #elif XAMARIN … #endif) 。
过去针对跨平台共享链接库的主推做法是PCL(Portable Class Library),取多个平台的交集,筛选保留各平台都支持的 API,但开发者仍需知道不同平台的差异。.NET Standard 则试图规范一套标准基础链接库 API 界面,各平台依此界面实作出一致的链接库,如此程序代码不需修改即可针对不同平台编译、执行。
即使有 .NET Standard,还是无法逃避各平台支持度不一的现况。.NET Standard 版本号码与 API 完整度成正比,与支持平台范广度成反比。.NET Standard 2.0提供的 API 数目一定比 1.0 多,但如果想涵盖 Windows Phone 8.1,就只能选择 .NET Standard 1.0 – 1.2。 dotnetstd-2
随着 .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 仍在发展中,未来可能还会有变动。
至于一些与平台高度相关的 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 均会提供一线支持。


猜你喜欢
- Premiere如何在视频中添加关键帧?Premiere是一款视频编辑软件,用户们可在视频中添加关键帧方便进行操作,那么如何在视频中添加关键
- 很多电脑都具有蓝牙功能,有时候想要把蓝牙打开连接音箱进行放歌,却发现电脑搜索不到蓝牙设备,这该怎么办?笔记本电脑与蓝牙装置之间使用的无线讯号
- Win10系统的用户现在是最多的,大家对系统的操作也十分熟悉了,那么在Win10系统中如何查看hosts文件呢,对电脑没那么精通的用户应该就
- 安装win10系统后,不少网友反映遇到了电脑滚动条自动滚动的问题,影响了正常运行。如何处理这样的问题?本文将与我们分享如何在win10系统中
- 今年 11 月,苹果发布了 M1 Mac 设备,Mac 设备开始转向 ARM 生态。尽管 Docker 在最初的 Apple Silicon
- qctray.exe是IBM ThinkPad笔记本电脑相关程序,用于IBM网络连接设置进程文件: qctray or qctray.exe
- 苹果电脑自带了苹果系统,所有用户想要将其更换成windows系统,就需要破解“BootCamp”上的限制才可以,但是升级后更新BootCam
- 线性规划求解的基本知识线性规划模型由3个基本部分组成:决策变量(variable)目标函数(objective)约束条件(constrain
- 如果你是一位Linux用户,正在使用AMD锐龙处理器,接下来的Linux 5.17版内核一定不要错过。Linux 5.17的功能特性已于近日
- 最近有用户咨询小编怎么在Win7系统里安装IPX协议,是否可以通过XP系统的文件实现安装呢?那针对这个问题,小编整理一些解决的办法,有需要的
- 在之前很长的一段时间百度账号不支持注销,而且账号ID从注册之后便不能再改,使得很多一开始乱取名字或想改名字的用户们想改都改不了,令用户们不得
- 微软已经确认Win10 Edge浏览器抛弃ActiveX及Silverlight插件,并以博客的形式向大家说明。微软表示这是跨浏览器、平台、
- 平常我们会存放许多文件在系统中,有时候想要将其打开,一时想不起文件名称,一个个文件翻找实在麻烦,这个时候就需要通过系统自带的搜索功能来帮助我
- qvp32.exe是Quick View Plus相关程序,用于阅读多种文件格式进程文件: qvp32 or qvp32.exe 进程名称:
- 我们在使用电脑的时候经常需要用到截图功能,有些用户喜欢使用自己的win11自带截图工具截图,但是不知道win11截屏的图片保存在哪里,其实我
- 关于Win10系统可能还是有很多用户不是很了解,那么为了更好的了解Win10系统的操作方式,在这里小编为大家准备的是关于Win10账户怎么退
- 电脑文件的隐私一直是很多用户比较在意的,尤其是商业机密及个人隐私等,不借助第三方软件如何在Win8.1系统里为文件夹加密隐藏,有此需求的朋友
- 先做出胶卷: 再画条和胶卷一样长的线或矩形,对接起来,组合。 组合好了设置矩形(或线条)
- 如何使用光盘安装win7系统?首先用户需要有Win7系统光盘,一般是买电脑的时候送的,而且电脑需要有光驱设备才可以放入光盘,今天系统部落小编
- nerosvc.exe是Nero CD刻录软件相关程序进程文件: nerosvc or nerosvc.exe 进程名称: Nero Sec