.NET 6 是自.NET 4 框架以来生态系统看到的最大版本更新,虽然.NET Core 是2014年开始非常大的一项重大战略举措,但是.NET 6是真正的具有强大动力的非常重要的版本。

2021年11月9日即将正式发布的.NET 6, 也许你认为.NET 5才刚刚发布,我才刚开始使用.NET Core 3.1, .NET6 就又要发布了 ,没错的,.NET 5是2020年11月10日发布,.NET Core 3.1早在2019年12月就发布了,微软已经承诺了每年都会发布一个版本的.NET , .NET 6正是按照时间表发布的版本。和这个版本发布节奏对应有一个支持政策:https://dotnet.microsoft.com/platform/support/policy/dotnet-core#cadence

从.NET 5开始,奇数版本版本18个月修补丁周期,而偶数版本有 三年 的修补丁周期。如果您已经将应用迁移到.NET Core 3.1,请注意,它有一个为期三年的修补丁周期,将于 2022 年 12 月结束;如果您仍在任何之前版本的 .NET Core上,则您目前已不在支持周期内。虽然尚未宣布对.NET框架 4.6.2 及以后的支持正式结束,但微软表示,.NET 框架 4.8 是.NET 框架的最后一个主要版本,将会随Windows 的支持计划更新:新的功能开发应针对以前称为 .NET Core(例如.NET 6)的平台。

.NET 6 带来了许多性能改进和生产力提升,而且还是一个长期支持版本 。在.NET 的每个连续版本中,.NET 在执行速度和内存使用方面都取得了一些令人印象深刻的进步。如果你一直没有跟踪, 你很可能会被. NET 框架的累积收益吹走。这一点你可以看看Techempower的测试的报告,具体参见 https://www.techempower.com/benchmarks/#section=data-r20&hw=ph&test=composite

变化很大

我们从 .NET 5开始向前看,作为长期支持 (LTS) 版本,.NET 6 代表着进一步的改进,并具有大量的设计和性能改进。我们将主要看看ASP.NET 6 运行时间的性能改进列表和.NET 6 中的中断更改,可以看到变化非常大。

C# 语言更新

C#语言的最新版本是10.0,有几个有趣的变化,对于爱整洁的csharper 来说,全局引用(Global using)和 文件范围的命名空间 是很好的互补。现在,您可以声明适用于整个编译单元(很可能是项目)的全局使用,并避免到每个文件顶部的去添加相同指令集。文件范围的命名空间还允许您声明适用于给定文件中所有代码的命名空间,无需单行无需更多匹配卷曲大括号,源文件中的凹痕级别也较少。

以前

CSharp9_Widget.cs
using System;
using System.Collections.Generic;
using System.Linq; namespace MyNamespace.Data
{
class Widget
{
private List<WidgetPart> _widgetParts;
public IEnumerable<WidgetPart> RequiredParts =>
_widgetParts; public bool RequiresPart(int partId) =>
_widgetParts.Any(x => x.Id == partId);
}
}
CSharp9_WidgetPartsInventory.cs
using System;
using System.Collections.Generic;
using System.Linq; namespace MyNamespace.Data
{
class WidgetPartsInventory
{
private Dictionary<int, WidgetPart> _widgetPartsById; public bool HavePartsToBuildWidget(Widget widget) =>
widget.RequiredParts.All(p =>
_widgetPartsById.ContainsKey(p.Id));
}
}

现在:

CSharp10_GlobalUsing.cs
global using System;
global using System.Collections.Generic;
global using System.Linq;
CSharp10_Widget.cs
namespace MyNamespace.Data;

class Widget
{
private List<WidgetPart> _widgetParts;
public IEnumerable<WidgetPart> RequiredParts => _widgetParts; public bool RequiresPart(int partId) =>
_widgetParts.Any(x => x.Id == partId);
}
CSharp10_WidgetPartsInventory.cs
namespace MyNamespace.Data;

class WidgetPartsInventory
{
private Dictionary<int, WidgetPart> _widgetPartsById; public bool HavePartsToBuildWidget(Widget widget) =>
widget.RequiredParts.All(p =>
_widgetPartsById.ContainsKey(p.Id));
}

还有其他一些与Record、模式和插值字符串相关的更新,但这些更新大多是语法糖。

ASP.NET Core 更新

如果你阅读每个版本的说明,很容易看到 ASP.NET Core 是一个核心,从网络主机和最小 API,热重载 到blazor都有很多感兴趣特性。

网络主机和最小 API

从 ASP.NET Core开始,每个应用程序都将应用初始化代码拆分为Program.cs(用于创建 Web 主机)和"Startup.cs(用于配置路由和 IoC 容器配置等应用程序问题)中,通常包含的两个单独的Class。特别是Startup类有一种神奇的感觉,它的方法从来没有被开发人员直接调用。而是WebHost在幕后自动调用配置方法。

ASP.NET团队分析了这个设计,并与其他 Web 框架相比,认为设置涉及的东西太多。因此,最小的API概念诞生了。 现在,应用程序初始化可以全部包含在一个文件中。而且你可能感到奇怪,Main方法都不需要了。可以在应用设置中定义路由,从而大大减少代码数量以启动和运行一个应用程序。

var builder = WebApplication.CreateBuilder(args);


var app = builder.Build();


app.MapGet("/", () => "Hello World!");

app.Run();


当然如果你仍然喜欢将服务设置与应用配置分离的组织样式,你仍然可以为 IServiceCollection 和 IApplicationBuilder 创建扩展方法,并从构建器和应用程序对象调用它们。


Hot Reload

几年来,许多 Javascript 框架都支持热重载,现在它也成为 C#中 ASP.NET Core应用的标配:通过热重加载,您可以在应用运行期间(在调试器下)编辑您的 C#代码,并且您的代码更改将自动反映在您的应用中,而不会丢失应用状态。换句话说,应用程序不需要重新启动。对于调试和交互式开发工作流程来说,这应该是一个很好的改进。 这个功能对于开发来说非常重要,就是这个小功能微软近日激怒了开源.NET社区,好消息是微软听取了社区的声音,恢复了通过CLI支持HotReload功能。具体参见 https://www.cnblogs.com/shanyou/p/15450214.html

Blazor

在 ASP.NET Core 6 里面有大量的更新是关于Blazor。例如,Blazor 应用程序现在可以直接编译到 WebAssembly,以便在 IL 解释(即.NET 本地编译)版本的相同代码上来提高应用程序速度。本地编译/调试体验仍然很快,因为漫长的编译时间仅适用于包装/发布。说到性能,Blazor WebAssembly可实现客户端代码的多线程。Javascript 受制于浏览器中的单线程。真正的多线程为可以从并行处理中受益的应用程序开辟了一些新的可能性(当然,这取决于浏览器的支持)。

还有一个非常有趣的功能,使 Blazor 可用于通过 MAUI 编写桌面应用程序。 Blazor 的最大好处就是开发人员可以完全用 C# 编写 Web 应用程序,而不需要为了写前端必须切换到 Javascript。 如果没有 C# 和 Javascript 之间的额外接缝,前端和后端代码之间就不需要映射层。 可以在两侧使用相同的 C# 模型,这意味着需要的代码更少,因此开发应用程序所需的时间也更少。 Blazor 桌面进一步扩展了这一概念,以允许此共享代码现在也可以与桌面应用程序无缝集成。

MAUI

MAUI 是 Multi-platform App UI 的缩写,是微软对跨平台 UI 框架的下一个尝试。 MAUI 是 Xamarin 的演进,还包括桌面平台。 它允许从单个代码库针对 iOS、Android、macOS 和 Windows。 MAUI 处理对本机平台 API 的抽象,因此您可以以与平台无关的方式访问设备传感器等内容。 对 Xamarin 的一种印象是,它们最终得到的界面很少,而且在任何平台上都不太好看。 MAUI 将如何解决这一问题还有待观察。 如果你关心的是跨多个平台的开发速度和维护成本,那么 MAUI 值得仔细研究。 MAUI 要在2022年的第二个季度正式发布,建议当前采取观望的方法,进行小的尝试以了解平台在全面采用之前的长期发展方向。

.NET 生态系统的蜕变之 .NET 6的更多相关文章

  1. .NET 生态系统的蜕变之 .NET 6云原生

    云原生的英文名是cloud native,native 就是土著的意思,也就是土著对当地的环境是非常适应的,在云的环境和传统的数据中心是非常不同的,云原生就是要用的云的技术来构建应用, 利用云的技术来 ...

  2. 进击的.NET 在云原生时代的蜕变

    你一定看过这篇文章 <进击的 Java ,云原生时代的蜕变>,  本篇文章的灵感来自于这篇文章.明天就将正式发布.NET Core 3.0, 所以写下这篇文章让大家全面认识.NET Cor ...

  3. .NET 在云原生时代的蜕变,让我在云时代脱颖而出

    .NET 生态系统是一个不断变化的生态圈,我相信它正在朝着一个伟大的方向发展.有了开源和跨平台这两个关键优先事项,我们就可以放心了.云原生对应用运行时的不同需求,说明一个.NET Core 在云原生时 ...

  4. 【转】.NET 在云原生时代的蜕变,让我在云时代脱颖而出

    原创:张善友 原文:https://www.cnblogs.com/shanyou/p/12198741.html .NET 生态系统是一个不断变化的生态圈,我相信它正在朝着一个伟大的方向发展.有了开 ...

  5. Spark 生态系统组件

    摘要: 随着大数据技术的发展,实时流计算.机器学习.图计算等领域成为较热的研究方向,而Spark作为大数据处理的“利器”有着较为成熟的生态圈,能够一站式解决类似场景的问题.那你知道Spark生态系统有 ...

  6. 猿团YTFCloud生态系统,全面服务创业者

    9月15日,YTFCloud已正式开启了内测. 创业者翘首以待的YTFCloud,虽然让部分创业者感受到了它的神奇,但对于更多暂时无法尝试的创业者来说,它依然有一层神秘的面纱. 今天小编就来带你近距离 ...

  7. Hadoop概念学习系列之Hadoop 生态系统(十二)

    当下 Hadoop 已经成长为一个庞大的生态体系,只要和海量数据相关的领域,都有 Hadoop 的身影.下图是一个 Hadoop 生态系统的图谱,详细列举了在 Hadoop 这个生态系统中出现的各种数 ...

  8. Hadoop生态系统如何选择搭建

    Apache Hadoop项目的目前版本(2.0版)含有以下模块: Hadoop通用模块:支持其他Hadoop模块的通用工具集. Hadoop分布式文件系统(HDFS):支持对应用数据高吞吐量访问的分 ...

  9. 蜕变·WebRebuild 2013 前端年度交流会邀请

    联网web前端设计行业通过一段时期的茧封或焰炼,web技术使行业.企业及自身发生质的改变.痛苦的蜕变是成长的契机,在彼此互相冲击.交流.融合的对话下,将以尊重包容互助合作同步发展的心态,对行业蜕变.自 ...

随机推荐

  1. 借助AWR报告分析解决oracleCPU过高的问题

    原文地址:http://www.cnblogs.com/crystal-guoguo/p/4213458.html 简介:在oracle数据库中,有两个非常实用的自带监控工具EM(Enterprise ...

  2. paramido简单使用教程

    之前很少用paramilko  今天想安装一下使用,然后百度了一下,然后就是各种 奇云技巧 ,各大博客照 着做都难成功,,然后火了,直接在CMD下输入 pip install paramiko     ...

  3. python中安装第三方库(使用豆瓣的镜像网站快速安装)

    #安装第三方库#标准库,第三方库#pip install selenium 直接从官网进行安装,有时网速会有点慢#可以去国内的镜像站安装#pip install selenium -i https:/ ...

  4. Ebiten-纯Golang开发的跨平台游戏引擎

    Go语言不是让你玩的啊喂! 昨天跟好基友聊开发的事,他说他等着闲下来的时候就用PYGame写个像那个最近挺火的"文X游X"一样的游戏.(没收广告费啊!) 基友突然嘲笑我:" ...

  5. [Python]爬虫获取知乎某个问题下所有图片并去除水印

    获取URL 进入某个知乎问题的主页下,按F12打开开发者工具后查看network面板. network面板可以查看页面向服务器请求的资源.资源的大小.加载资源花费的时间以及哪些资源加载失败等信息.还可 ...

  6. use关键字在PHP中的几种用法

    在学习了和使用了这么多年的PHP之后,您知道use这个关键字在PHP中都有哪些用法吗?今天我们就来看一下它的三种常见用法. 1. 用于命名空间的别名引用 // 命名空间 include 'namesp ...

  7. Jmeter系列(18)- 八大组件

    说明 取样器(Sampler):不与其他元件发⽣交互的作⽤的元件 逻辑控制器(Logic Controller):只对其⼦节点的sampler有效,⽽其他元件需要与sampler等元件交互 前置处理器 ...

  8. 搭建http文件服务器 - python3使用http.server搭建http文件服务器

    适用场景 只要有python3就可以,windows系统cmd窗口直接敲命令,Linux系统,直接敲命令 step-1 cd cd 到需要搭建服务器的目录 step-2 http.server pyt ...

  9. Linux系列(38) - 源码包安装(2)

    安装前准备 安装C语言编译器"gcc" yum -y install gcc --c 源码包语言编译器 下载源码包 安装注意事项 源代码保存位置:/usr/local/src/ 软 ...

  10. Centos7 安装 .Net Core2.2

    添加 rpm 源 sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm 开始 ...