.NET Standard 2.1 发布,进一步使 .NET 实现一致

王练
 王练
发布于 2018年11月07日
收藏 11

微软在11月5日发布了 .NET Standard 2.1 ,开发团队计划在 .NET Standard 2.1 中添加大约 3000 个 API ,其中很大一部分都是全新的,另外一部分则是添加到标准中的现有 API ,以便进一步使 .NET 实现一致。

继续阅读以了解有关此最新版本中新功能的更多信息,以及有关平台支持、治理和编码的信息。

更新亮点

  • Span<T>。在 .NET Core 2.1 中,开发团队添加了一个类似于数组的类型 Span<T>,它允许以统一的方式表示托管和非托管内存,并支持切片而无需复制。它是 .NET Core 2.1 中与性能相关的大多数改进的核心。由于它允许以更有效的方式管理缓冲区,因此可以帮助减少内存分配和复制。Span<T> 被认为是一种非常基础的类型,因为它需要运行时和编译器支持才能充分利用。

  • 使用 span 的基础 API。虽然 Span 已经可以作为 .NET Standard 兼容的 NuGet 包(System.Memor)使用,但添加此包不能扩展 .NET Standard 类型的成员去使用 span。.NET Core 2.1 添加了许多允许使用 span 的API,如  Stream.Read(Span) 。将 span 带入 .Net Standard 的话,添加这些 API 是很重要的一部分。

  • 反射 emit。为了提高生产力,.NET 生态系统一直大量使用动态功能,如 reflection(反射)和 reflection emit 。Emit 通常被用作优化性能,以及为代理接口动态生成类型的方法。因此,许多人要求将 reflection emit 包含在 .NET standard 中。以前,开发团队试图通过 NuGet 包提供,结果发现无法使用包来模拟这样的核心技术。使用 .NET Standard 2.1 ,你可以访问轻量级代码生成(LCG)以及reflection emit ,同时添加了两个新的 API ,允许你检查生成代码的能力(RuntimeFeature.IsDynamicCodeSupported)以及生成的代码是否被解释或编译(RuntimeFeature.IsDynamicCodeCompiled)。

  • SIMD。.NET Framework 和 .NET Core 支持 SIMD 已经有一段时间了,多被用于加速 BCL 中的基本操作,例如字符串比较。开发团队收到了很多在 .NET Standard 中公开这些 API 的请求,因为这些功能需要运行时支持,因此无法作为 NuGet 包提供。

  • ValueTask 和 ValueTask<T>。在 .NET Core 2.1 中,最大的亮点是对高性能场景的基础知识的支持改进,其中还包含提高 async/await 效率。ValueTask 已经存在,并且如果操作同步,则允许返回结果,而无需分配新的 Task。在 .NET Core 2.1 中,开发团队进一步对其进行改进,使得有一个相应的非泛型 ValueTask 变得很有用。它允许减少分配内存,即使是在必须异步完成操作的情况下也是如此。在 .NET Standard 2.1 中公开这些 API 将使库作者能够作为消费者和生产者从中受益。

  • DbProviderFactories。在 .NET Standard 2.0 中,开发团队在 ADO.NET 中添加了几乎所有的基础类型(Primitives),以允许 ORM 和数据库实现者进行通信。不幸的是,当时 DbProviderFactories 未在其中,新版本已将其补上。简而言之,DbProviderFactories  允许库和应用在编译时使用特定的 ADO.NET 提供程序而无需知道任何特定类型,方法是在基于名称的已注册 DbProviderFactory 实例中进行选择,例如,可以从配置设置中读取。

  • General Goodness。自从  .NET Core 开源后,基础类库中已添加许多小功能,例如 System.HashCode 用于组合 hash code 或 System.String 上的新的重载。.NET Core 中大约有800个新成员,且几乎都加入了 .NET Standard 2.1。

有关更多详细信息,您可能需要查看 .NET Standard 2.1 和 2.0 之间的完整 API 差异。您还可以使用 apisof.net 快速检查 .NET Standard 2.1 中是否包含某些 API。

更多内容可查阅发行说明:https://blogs.msdn.microsoft.com/dotnet/2018/11/05/announcing-net-standard-2-1/

.NET 平台支持

如果您错过了我们的 .NET Core 3.0 和 .NET Framework 4.8 更新,其中已经描述了我们对 .NET Framework 和 .NET Core 的支持,如下所示:

  • .NET Framework 是 .NET 的实现,它安装在超过 10 亿台计算机上,因此需要保持尽可能的兼容。因此,它的更新速度要比 .NET Core 慢。即使安全性和小错误修复也会导致应用程序中断,因为应用程序依赖于先前的行为。我们将确保 .NET Framework 始终支持最新的网络协议、安全标准和Windows 功能。

  • .NET Core 是 .NET 的开源、跨平台和快速移动版本。由于它的 side-by-side 性质,它可以进行一些无法在 .NET Framework 上冒险进行的修改。这意味着 .NET Core 将随着时间的推移获得 .NET Framework 无法获得的新 API 和语言功能。在 Build 大会中,我们展示了 .NET Core 上文件 API 如何比之前更快。如果我们将这些相同的更改放入 .NET Framework ,我们可能会破坏现有的应用程序,我们不希望这样做。

鉴于 .NET Standard 2.1 中的许多 API 添加需要修改运行时才能有意义,.NET Framework 4.8将保留在 .NET Standard 2.0 上,而不是实现 .NET Standard 2.1 。.NET Core 3.0 以及即将推出的 Xamarin,Mono 和 Unity 版本将更新以实现 .NET Standard 2.1。

需要支持 .NET Framework 客户的库作者应该继续使用 .NET Standard 2.0。实际上,大多数库都可以保留在 .NET Standard 2.0 上,因为新添加的 API 主要用于高级场景。但是,这并不意味着库作者无法利用这些 API,即使他们必须支持 .NET Framework。在这些情况下,他们可以使用多目标来编译 .NET Standard 2.0 和 .NET Standard 2.1。这允许编写可以暴漏更多特性的代码,或者在支持 .NET Standard 2.1 的运行时上提供更高效的实现,同时不放弃 .NET Standard 2.0 提供的更大的支持范围。

有关多目标的更多推荐,请查看跨平台目标的最新文档。

Governance model 治理模式

.NET Standard 1.x 和 2.0 版本专注于揭露现有概念。大部分工作都在 .NET Core 方面,因为该平台从更小的 API 集开始。在前进的道路上,我们通常必须标准化全新技术,这意味着我们需要考虑对所有 .NET 实现的影响,而不仅仅是 .NET Core ,包括在其他社区(如 Mono 或 Unity )中管理的那些。我们的治理模式已经更新,来考虑所有因素:

.NET Standard 审核委员会。为确保我们不会最终添加无法实现的大量 API,审核委员会将签署有关 .NET Standard 的 API 添加内容。该委员会由 .NET 平台、Xamarin、Mono、Unity 和 .NET Foundation 的代表组成,将由 Miguel de Icaza 担任主席。我们将继续努力根据共识做出决策,并将利用 Miguel 的广泛专业知识和经验来构建 .NET 的实现,并在需要时得到多方的支持。

正式批准流程。.NET Standard 1.x 和 2.0 版本在很大程度上是通过计算现有 .NET 实现的 API 共同来实现的,这意味着 API 集实际上是计算结果。展望未来,我们正在实施一种社区策略:

  • 任何人都可以向 .NET Standard 提交 API 添加建议

  • 默认认为已有实现中的成员存在 Standard 中。为了防止意外的分裂,我们将默认认为任何 .NET 实现已经添加的所有成员已经存在在 Standard 中。这里的基本原则是成员级别的分歧是不可取的,除非API 出现问题,否则很可能是一个很好的补充。

  • 验收要求:


    • 审核委员会成员的响应。该人将被分配该问题,并且引导这个问题,直至其被接受或被拒绝。如果没有董事会成员愿意响应该提案,将被视为被拒绝。


    • 至少在一个 .NET 实现中稳定实现。这个实现必须授权在与 MIT 兼容的开源许可下。这将允许其他 .NET 实现启动他们自己的实现或只是按原样使用该功能。

  • .NET Standard 更新是由计划的,通常会遵循一组主题。我们避免发布大量不属于一组常见方案的微小功能。相反,我们尝试定义一组目标,以描述特定 .NET Standard 版本提供的功能区域类型。这简化了某些库应该依赖于 .NET Standard 的问题。它还使 .NET 实现更容易决定是否值得实现更高版本的 .NET Standard。

  • 版本号需要经过讨论,通常它是很重要的。虽然我们不打算进行重大更改,但如果新版本添加了大量API(例如,当我们将 .NET Standard 2.0 中的 API 数量增加一倍时),或者整个开发体验有了相当大的改变,我们将修改 major 版本(就像我们在 .NET Standard 2.0 中添加的.NET Framework 库一样,增加了兼容性模式)。

有关更多信息,请查看 .NET Standard 治理模式和 .NET 标准审核委员会

总结

.NET Standard 2.1 的定义正在进行中。您可以在 GitHub 上观看我们的进度并提出请求。

如果要快速检查特定 API 是否在 .NET Standard(或任何其他.NET平台)中,可以使用 apisof.net 。您还可以使用 .NET 可移植性分析器检查现有项目是否可以移植到.NET Standard 2.1。

Happy coding!

部分内容来自:https://www.cnblogs.com/Rwing/archive/2018/11/06/announcing-net-standard-2-1.html

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:.NET Standard 2.1 发布,进一步使 .NET 实现一致
加载中

最新评论(8

久永
久永

引用来自“dhssingle”的评论

nfx4.8不支持.NET Standard 2.1,不知道后续版本会不会实现。

引用来自“久永”的评论

看这个样子没戏,估计可能以另一种形式支持。
倒是 .net core 3.0 之后的跨平台界面,可以期待。

引用来自“你们都是技术宅”的评论

.net core 3.0的winform和wpf仍然是windows平台独有的

引用来自“久永”的评论

是的,不过我指望的真不是那个,而是已经在移动平台实现跨平台的那个。

引用来自“你们都是技术宅”的评论

你说Xamarin?那玩意感觉用的人还是太少,现在谷歌的flutter感觉更好点,xamarin未来感觉不太乐观
flutter只有面向移动的吧?而且是纯粹面向代码的,对设计人员并不友好。
Xamarin现在桌面社区已经开始有了,其界面和代码可以分离,最关键是有 VS可以可视化编辑。
flutter只是个实现而已,生态来说,Xamarin要好多了。
不是开源社区对微软的一贯态度,公平来说 Xamarin 其实不错的,特别对于原来做 Silverlight、WPF的.Net程序员。
你们都是技术宅
你们都是技术宅

引用来自“dhssingle”的评论

nfx4.8不支持.NET Standard 2.1,不知道后续版本会不会实现。

引用来自“久永”的评论

看这个样子没戏,估计可能以另一种形式支持。
倒是 .net core 3.0 之后的跨平台界面,可以期待。

引用来自“你们都是技术宅”的评论

.net core 3.0的winform和wpf仍然是windows平台独有的

引用来自“久永”的评论

是的,不过我指望的真不是那个,而是已经在移动平台实现跨平台的那个。
你说Xamarin?那玩意感觉用的人还是太少,现在谷歌的flutter感觉更好点,xamarin未来感觉不太乐观
曾建凯
曾建凯
喵喵喵 net core3.0出了,又要更新了。
久永
久永

引用来自“dhssingle”的评论

nfx4.8不支持.NET Standard 2.1,不知道后续版本会不会实现。

引用来自“久永”的评论

看这个样子没戏,估计可能以另一种形式支持。
倒是 .net core 3.0 之后的跨平台界面,可以期待。

引用来自“你们都是技术宅”的评论

.net core 3.0的winform和wpf仍然是windows平台独有的
是的,不过我指望的真不是那个,而是已经在移动平台实现跨平台的那个。
你们都是技术宅
你们都是技术宅

引用来自“dhssingle”的评论

nfx4.8不支持.NET Standard 2.1,不知道后续版本会不会实现。

引用来自“久永”的评论

看这个样子没戏,估计可能以另一种形式支持。
倒是 .net core 3.0 之后的跨平台界面,可以期待。
.net core 3.0的winform和wpf仍然是windows平台独有的
久永
久永

引用来自“dhssingle”的评论

nfx4.8不支持.NET Standard 2.1,不知道后续版本会不会实现。
看这个样子没戏,估计可能以另一种形式支持。
倒是 .net core 3.0 之后的跨平台界面,可以期待。
dhssingle
dhssingle
nfx4.8不支持.NET Standard 2.1,不知道后续版本会不会实现。
法号阿兴
法号阿兴
威武~~~:smile:
返回顶部
顶部