时机决定一切,对于 .NET5 也是如此。实际上微软.NET团队在开始开发 .NET Core 时,对 .NET Framework 的全面重写是不可想象的。当时Microsoft 正在响应在 Linux、容器中和 PaaS 上显著增强 Azure 托管体验的需求。因此,公司专注于推出一些产品来满足客户和 Azure 产品团队的需求。

  在 .NET Core 2.0 中,任务扩展到匹配 .NET Framework 中的功能。同样,团队专注于发布一些可行的产品,而不是盲目地推出过多产品。但随着 .NET Core 3.0 的发布和 .NET Standard 2.1 的实现,情况开始发生变化。当一个新功能或 bug 出现时,必须对三个不同框架进行更改,这种想法令人产生烦恼,而且会产生额外的费用。和任何优秀的开发人员一样,微软很快就萌生了将代码尽可能多地重构为单个代码库的想法。

  因此,.NET5诞生了。统一每个框架所有功能的想法也随之诞生 - 无论是简单的 csproj 格式、采用开放源代码开发模型、支持与 Java 和 Objective-C(包括 Swift)的互操作性,还是支持 JIT 和 AOT 编译。


  .NET5.0 于2020年11月10日正式发布,它是3.1之后的 .NET Core 的下一个主要版本。微软将这个新版本命名为 .NET 5.0 而不是 .NET Core 4.0,其原因有两个:

  • 跳过了版本号4.x,以避免与 .NET Framework 4.x 混淆。

  • 从名称中删除了“ Core”,以强调这是.NET未来的主要实现。与 .NET Core 或 .NET Framework 相比,.NET 5.0 支持更多类型的应用程序和平台。

  ASP.NET Core 5.0 基于 .NET 5.0,但保留名称“ Core”以避免将其与 ASP.NET MVC 5 混淆。同样,Entity Framework Core 5.0保留名称“ Core”以避免将其与 Entity Framework5、Entity Framework6 混淆。

  微软称将来只会有一个.NET平台,使用它可以开发 Windows、Linux、macOS、iOS、Android、tvOS、watchOS和WebAssembly等平台的应用。.NET 5中引入了新的.NET API,运行时和语言功能。

.NET5统一了不同的开发框架、减少了代码复杂性,并显著提高了跨平台的可实现性。
 
.NET 5 = .NET Core vNext

  .NET 5 是下一代 .NET Core。该项目旨在通过以下几个关键方式来改进.NET:

  • 创建一个可在任何环境使用的 .NET 运行时和框架,并具有统一的运行时行为和开发者体验。
  • 通过充分利用 .NET Core、.NET Framework、Xamarin 和 Mono 来扩展 .NET 的功能。
  • .NET5 由许多单个代码库构建组成,开发者(微软员工、社区志愿者、个人开发者)可以一起工作并扩展功能,从而改进方案。
  • 这个新项目和方向是.NET的一个重要转折点。无论开发者构建哪种类型的应用程序,通过 .NET5 编写的代码和项目文件都是相同的。每个应用都可以访问相同的API、运行时和语言功能,并受益于几乎每天都在运行的CoreFX的性能改进。

.NET5 让 .NET Core、.NET Framework 和 Mono(Xamarin)走向统一,并且打通七大开发方向(桌面应用、Web应用、云服务、移动开发、游戏开发、物联网IoT、人工智能AI)。

您喜爱的.NET Core的一切都将继续存在:
  • 在GitHub上开源和面向社区。
  • 跨平台实现。
  • 支持利用特定于平台的功能,例如Windows窗体和Windows上的WPF,以及从Xamarin到每个本机平台的本机绑定。
  • 高性能。
  • 并排安装。
  • 小型项目文件(SDK样式)。
  • 功能强大的命令行界面(CLI)。
  • Visual Studio,适用于Mac的Visual Studio和Visual Studio Code集成

以下是新内容:

  • 您将在运行时体验上有更多选择(下面更多内容)。
  • Java互操作性将在所有平台上可用。
  • 在多个操作系统上将支持Objective-C和Swift的互操作性。
  • CoreFX将得到扩展,以支持.NET的静态编译(提前-AOT),更小的占用空间以及对更多操作系统的支持。
.NET 5.0的亮点

微软为.NET5.0写了很多示例,请参考:https://gist.github.com/richlander/50c34a8714eb3436e5d9d4d5d420776e

.NET 5.0不会替代.NET Framework

.NET 5.0是.NET未来的主要实现,而 .NET Framework 4.x 仍受微软的技术支持。

微软没有计划将以下技术从.NET Framework移植到.NET 5.0,但在.NET 5.0 中有替代方案:

.NET 5.0不会替代.NET Standard

  在最初的概念中,认为所有 .NET Framework 都可以移植到 .NET Core 的想法是不现实的。在 .NET Core 2.0 发布前后,这种情况开始发生变化。Microsoft 意识到,它需要为所有 .NET 框架版本定义框架标准,使在一个框架上运行的代码能够移植到另一个框架上。

  此标准后来被称为“.NET Standard”。其目的在于确定框架需要支持的 API,以便针对标准的库可以依赖于一组可用的特定 API。事实证明,定义标准然后使用 Xamarin/Mono、.NET Core 和 .NET Framework 实现它,成为使 .NET 5 统一策略成为可能的关键组件。

  例如,一旦每个框架都实现了支持 .NET Standard API 的代码,那么将单独的代码库合并为一个代码库(某种程度上的重构)似乎是合乎逻辑的。而且,如果行为不同(例如,JIT 与 AOT 编译),为什么不合并代码,以便所有平台都支持方法和功能呢?这项工作并不简单,但其结果是在降低复杂性和维护方面向前迈出了一大步,同时将所有平台功能都统一起来。

  新的应用程序开发可以为所有项目类型(包括类库)指定 .NET5.0 目标框架名字对象(TFM)。在.NET5工作负载之间共享代码得到了简化,因为您只需要 NET5.0TFM。

  对于.NET 5.0应用程序和库,NET5.0目标框架名字对象(TFM)组合并替换 netcoreapp 和 netstandard TFMs。但是,如果您计划在 .NET Framework、.NET Core和.NET 5工作负载之间共享代码,可以通过指定netstandard2.0作为TFM来实现。有关详细信息,请参见.NET Standard

平台和Microsoft支持

  对于Windows、macOS和Linux,.NET5.0具有与.NETCore3.1几乎相同的平台支持列表。如果您在受支持的操作系统上使用.NET Core 3.1,那么您应该能够在大多数情况下在同一操作系统版本上采用.NET 5.0。.NET5.0最重要的新增功能是Windows ARM64。

  .NET5.0是最新版本。这意味着它将在.NET6.0发布后的三个月内得到支持。因此,我们希望在2022年2月中旬之前支持.NET 5.0。.NET 6.0将是LTS版本,并将像.NET Core 3.1一样支持三年。

语言能力

  C#9和F5是.NET 5.0版本的一部分,并包含在.NET 5.0 SDK中。Visual SDK也包含在5.0 SDK中。它不包括语言更改,但进行了改进以支持.NET Core上的Visual Basic应用程序框架。

  C#源代码生成器是C#编译器的一项重要重要新功能。从技术上讲,它们不属于C#9,因为它没有任何语言语法。请参阅新的C#源代码生成器示例,以帮助您开始使用此新功能。我们希望在.NET 6.0及更高版本的.NET产品中更多地使用源代码生成器

  为了亲自尝试新版本,我们中的一些人决定更新dotnet / iot存储库,以使用新的C#9语法并以.NET 5.0为目标。通过采用新的语法,这些更改导致删除了超过2k行代码。它使用顶级程序,记录,模式和开关表达式。还对其进行了更新,以利用.NET库中完整的可空注释集。我们还更新了.NET IoT文档。


参考文献:

  • .NET5.0 发布公告:https://devblogs.microsoft.com/dotnet/announcing-net-5-0/
  • .NET5.0 简介:https://devblogs.microsoft.com/dotnet/introducing-net-5/
  • .NET5.0 新增功能:https://docs.microsoft.com/zh-cn/dotnet/core/dotnet-five
  • .NET5.0计划:https://docs.microsoft.com/zh-cn/archive/msdn-magazine/2019/july/csharp-net-reunified-microsoft%E2%80%99s-plans-for-net-5

.NET平台系列13 .NET5 统一平台的更多相关文章

  1. .NET平台系列10 .NET统一平台愿景

    系列目录     [已更新最新开发文章,点击查看详细] 2019年,微软分享了[统一的.NET堆栈和生态系统的愿景].给开发者带来的价值是,将能够使用一组API,语言和工具来针对广泛的应用程序类型,包 ...

  2. .NET平台系列15 .NET5的吊炸天性能改进

    系列目录     [已更新最新开发文章,点击查看详细] .NET5的性能改进测试功能 Benchmark.NET现在是衡量.NET代码性能的规范工具,可轻松分析代码段的吞吐量和分配. .NET5的性能 ...

  3. .NET平台系列18 .NET5的超强优势

    系列目录     [已更新最新开发文章,点击查看详细] 支持所有 .NET 应用程序类型 .NET5 统一版本之后将支持所有 .NET 应用程序类型:Xamarin.ASP.NET.IoT 和桌面.此 ...

  4. .NET平台系列16 .NET5/Asp.Net Core 在全球Web框架权威性能测试 Web Framework Benchmarks 中的吊炸天表现

    系列目录     [已更新最新开发文章,点击查看详细] TechEmpower Web Framework Benchmarks 是许多Web应用程序框架执行基本任务(如JSON序列化.数据库访问和服 ...

  5. .NET平台系列17 .NET5中的ARM64性能

    系列目录     [已更新最新开发文章,点击查看详细] .NET团队使.NET 5大大提高了常规性能和ARM64性能.在<.NET5中的性能改进>博客中可以查看总体改进情况.在这篇文章中, ...

  6. .NET平台系列14 .NET5中的新增功能

    系列目录     [已更新最新开发文章,点击查看详细] .NET5中不包含的内容 尽管 .NET5 框架中提供了一组重要 API,但它并不包括过去20年左右开发的所有 API,但是.NET Stand ...

  7. .NET平台系列21:云原生时代 .NET5 雄霸天下

    系列目录     [已更新最新开发文章,点击查看详细] 随着互联网持续高歌猛进,相关技术名词也是层出不穷.微服务.容器化.DevOps.ServerLess.FaaS,这两年最火的当属云原生Cloud ...

  8. .NET平台系列22:.NET Core/.NET5/.NET6 对比 .NET Framework

    系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<.NET平台系列2 .NET Framework 框架详解>与 <.NET平台系列7 .NET Core 体系结构 ...

  9. .NET平台系列24:从.NET Framework迁移到.NET Core/.NET5的技术指南

    系列目录     [已更新最新开发文章,点击查看详细] 本文讲解了在将代码从 .NET Framework 移植到 .NET(旧称为 .NET Core)时应考虑的事项. 对于许多项目,从 .NET ...

随机推荐

  1. 并发编程之ThreadLocal

    并发编程之ThreadLocal 前言 当多线程访问共享可变数据时,涉及到线程间同步的问题,并不是所有时候,都要用到共享数据,所以就需要线程封闭出场了. 数据都被封闭在各自的线程之中,就不需要同步,这 ...

  2. LINQPad,我的C#/.NET学习诀窍

    LINQPad,我的C#/.NET学习诀窍 在我以往的文章中,尤其涉及代码演示的,都使用了同一个工具--LINQPad.但许多客户面对我分享的.linq源文件都迷茫不知所措,因此有必要来聊聊一下这个强 ...

  3. 1-2 postman工具简介

    postman提供了一个多窗口和多选项卡页面用于发送和接受请求,postman努力保持整洁和灵活,提供更多的空间,满足用户的需要.他很简单,能满足大部分接口的测试,性价比特别高.如图所示:  1.侧边 ...

  4. [ Laravel 5.6 文档 ] 进阶系列 —— 任务调度

    简介 Cron 是 UNIX.SOLARIS.LINUX 下的一个十分有用的工具,通过 Cron 脚本能使计划任务定期地在系统后台自动运行.这种计划任务在 UNIX.SOLARIS.LINUX下术语为 ...

  5. hdu1815 2sat + 二分 + 建图

    题意:       给你两个总部,s1 ,s2,和n个点,任意两点之间都是通过这个总部相连的,其中有一些点不能连在同一个总部上,有一些点可以连接在同一个总部上,总部和总部之间可以直接连接,就是假如a, ...

  6. (翻译)Attacking Interoperability(攻击互操作性)in Black Hat 2009 研究报告

    前言 攻击互操作性(Attacking Interoperability)是 Mark & Ryan & David 发表于 2009 年的美国黑帽大会(Black Hat)上的一份研 ...

  7. C#-获取页面源代码

    /// <summary> /// 获取源代码 /// </summary> /// <param name="url"></param& ...

  8. Cauchy-Binet 公式的应用

    Binet-Cauchy 公式 我们知道,方阵的行列式不是方阵的线性函数,即对 \(\forall \lambda\in F,A,B\in F^{n\times n}\),有 \(det(A+B)\n ...

  9. 【python】Leetcode每日一题-前缀树(Trie)

    [python]Leetcode每日一题-前缀树(Trie) [题目描述] Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的 ...

  10. 内存回收导致关键业务抖动案例分析-论云原生OS内存QoS保障

    蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友.目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作. 导语 云原生场景,相比于传统的IDC场景,业务更加复杂 ...