34

.NET 5 自身就是一个 .NET Standard

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA%3D%3D&%3Bmid=2654080432&%3Bidx=1&%3Bsn=8ce37f54dae27c44838e7b582aef5f68
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

微软2014年开源.NET的动作是实现一个全新的.NET Core ,从而引入了一个新的问题:选择代码的编译目标变得困难,需要面对3个环境。因此微软为了解决这个问题,引入了 两个主要的概念:目标框架别名(Target Framework Moniker)和.Net Standard

目标框架别名(Target Framework Moniker) 是.NET Core 中应用程序所针对的框架类型 + 版本号的 ID。我们可以把别名分成两个不同的类型:跨平台的目标:.Net Standard 和平台实现,如.Net Framework、.Net Core 和 Xamarin.

.Net Standard 库是.Net Core 可移植性的核心。其目的是定义标准的 API 集。这些 API,如集合、线程、反射,是由.Net Core、.Net Framework、Xamarin 和 Mono 等平台实现的。它们是开发人员用来构建自己的库和应用程序的基本构建块。

随着.NET 5的完成,微软通过5年时间把代码的编译目标的选择困难问题解决了,而且变得更加简单,因此微软 .NET 官方博客近日发布了一篇谈论 .NET Standard 未来的文章。文章作者是 .NET 项目经理 Immo,他在文章中指出未来 .NET Standard 将会被 .NET 5 取代,还对 .NET 5 如何改进代码共享以及取代 .NET Standard 这个说法进行了解释,此外还介绍了仍然需要 .NET Standard 的情况。

UrMFziN.png!mobile

Immo 表示不会再为 .NET Standard 发布新版本,但 .NET 5 及其所有未来的版本将继续支持 .NET Standard 2.1 和更早版本。他建议开发者可以考虑将 net5.0 (以及未来的版本)作为共享代码的基础,甚至可以将 .NET 5 视为 .NET Standard vNext。

Z732UbE.gif!mobile

因为 .NET 5 将会是具有统一功能和 API 的单一产品,可用于开发 Windows 桌面应用程序、跨平台移动应用程序、控制台应用程序,以及云端服务和网站。而且为了更好地体现 .NET 5 的定位,微软还更新了目标框架名称(TFM, Target Framework Name)。

.NET Standard 的出现是为了提供 .NET 统一跨平台的基础函数库,方便开发者编写在任何平台执行的函数库,但 Immo 指出了 .NET Standard 存在 3 个问题,包括版本更新缓慢、.NET Standard 版本与 .NET 实现的映射较为复杂以及 .NET Standard 包含了特定于平台的功能,因此无法静态验证代码是否真正可移植。

.NET 5 针对这些问题均提供了解决方案,而且 .NET 5 和未来的版本将会支持 .NET Standard 2.1 以及更早版本,因此开发者可以不需要更新现有程序,不过如果开发者希望使用额外的 Runtime 功能、语言功能以及 API,可以选择将 .NET Standard 升级使用 .NET 5。

对于新项目应该从 .NET Standard 2.0 开始还是直接使用 .NET 5 的问题,Immo 认为主要取决于 应用程序组件和可重用的库

当开发者使用函数库将应用程序分解成多个组件,为简单起见,组成应用程序的所有项目最好都位于同一版本的 .NET 上,此时可以考虑 .NET 5。

如果要构建计划在 NuGet 上使用的可重用库,则需要考虑可用的功能集:.NET Standard 2.0 是 .NET Framework 支持 .NET Standard 的最高版本,其提供了庞大的功能集,覆盖范围广。

总结:

  • 用于在 .NET Framework 和所有其他平台之间共享代码,使用 netstandard2.0

  • 用于在 Mono,Xamarin 和 .NET Core 3.x 之间共享代码,使用 netstandard2.1

  • 向后共享代码,使用 net5.0


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK