自从.NET 5 发布以来,许多人都在问它对.NET Standard 意味着什么,想知道它是不是还能吸引主流开发人员的兴趣 。
在本文中,我将介绍.NET 5 是如何改善代码共享并替代.NET Standard 的 。同时,我还将介绍一些仍然需要.NET Standard 的情况 。
TL;DR.NET 5 将是一个具有一组统一特性和 API 的单一产品,可用于 windows 桌面应用、跨平台移动应用、控制台应用、云服务和网站 。
为更好地反映这一点,我们更新了目标框架名称(TFM):
- net5.0 。这适用于运行在所有平台上的代码 。它合并并替换了netcoreApp和netstandard名称 。这个 TFM 总体上只包括跨平台工作的技术(除了一些特例,就像我们在.NET Standard 中所做的那样) 。
- net5.0-windows(以及之后的net6.0-Android和net6.0-IOS) 。这些 TFM 代表特定于 OS 的.NET 5 风味,其中包括net5.0加上特定于 OS 的特性 。
由于net5.0是所有这些新 TFM 的共享基础,因此这意味着运行时、库和新的语言特性将围绕这个版本号来运作 。例如,为了使用 C# 9,你需要使用net5.0或net5.0-windows 。
你的目标应该是什么.NET 5 和将来所有的版本都会一直支持.NET Standard 2.1 和更早版本 。从.NET Standard 目标切换到.NET 5 的唯一理由是可以访问更多的运行时特性、语言特性或 API 。因此,你可以将.NET 5 视为.NET Standard 的 vNext 。
新代码呢?你还是应该从.NET Standard 2.0 开始还是应该直接进入.NET 5?这要看具体情况 。
- 应用组件 。如果你使用库将应用程序分解为多个组件,我的建议是使用netX.Y,其中X.Y是应用程序(或多个应用程序)目标的最低.NET 。为简单起见,你可能希望组成应用程序的所有项目都位于同一版本的.NET 上,因为这样以来,你就可以在所有地方都获得相同的 BCL 特性 。
- 可重用的库 。如果你要构建计划在 NuGet 上发布的可重用库,则需要考虑覆盖率和可用特性集之间的权衡 。.NET Standard 2.0 是.NET Framework 支持的.NET Standard 的最高版本,因此它将为你提供最大的覆盖范围,同时还为你提供了相当大的特性集 。我们通常建议你不要以.NET Standard 1.x 为目标,因为麻烦事太多了 。如果你不需要支持.NET Framework,则可以使用.NET Standard 2.1 或.NET 5 。大多数代码都可以跳过.NET Standard 2.1,直接转到.NET 5 。
在几年内,可重用库的选项仅涉及netX.Y的版本号,这基本上就是为.NET 构建库的标准途径——通常来说,你会希望支持某些较旧的版本,以确保获得最大的采用率 。
总结一下:
- 使用netstandard 2.0在.NET Framework 和其他所有平台之间共享代码 。
- 使用netstandard 2.1在 Mono、Xamarin 和.NET Core 3.x 之间共享代码 。
- 使用net5.0为将来的项目进行代码共享 。
- 它的版本更替很慢,这意味着你无法轻松使用最新特性 。
- 它需要一个解码器环才能将版本映射到.NET 实现 。
- 它公开了特定于平台的特性,这意味着你无法静态验证代码是否真正可移植 。
问题 1:.NET Standard 版本更新缓慢.NET Standard 是.NET 平台尚未在实现级别融合的时候设计的 。这使开发人员很难编写需要在不同环境中运行的代码,因为不同的负载使用了不同的.NET 实现 。
.NET Standard 的目标是统一基类库(BCL)的特性集,以便你可以编写可在任何地方运行的库 。这对我们很有帮助:.NET Standard 在前 1000 个软件包中得到了 77%以上的支持 。而且,如果我们查看 NuGet.org 上最近 6 个月中更新的所有软件包,则采用率是 58% 。
支持.NET Standard 的包:
文章插图
但是单独标准化 API 集会有代价 。每当我们添加新的 API 时都需要协调 。.NET 开源社区(包括.NET 团队)通过提供新的语言特性、可用性改进、新的跨领域特性(例如Span<T>)或支持新的数据格式或网络协议,以在 BCL 中不断创新前进 。
推荐阅读
- .net core IIS部署教程
- 为什么中国火器到清朝就停止发展了 清朝为何不发展火器
- 基于.NET Core+Bootstrap的快速后台开发框架
- 基于.NET Core的Orchard Core框架出来了
- 自媒体|趣头条宣布停止自媒体平台:6月28日后账户余额清零
- .Net在Windows上使用Jenkins做CI/CD
- ppt背景音乐怎么中途暂停后继续播放?ppt音乐怎么中途停止?
- .NET CORE HttpClient使用
- C语言标准库的7类函数
- 巧克力|这类常见的零食立即停止食用!或导致中毒