.NET 生态系统的蜕变之 .NET 6

.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

a28cb8773d77ca5a27d58f2c61e1ef14.png

从.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,热重载 到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年的第二个季度正式发布,建议当前采取观望的方法,进行小的尝试以了解平台在全面采用之前的长期发展方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我看你还能坚持多久?!

1 我看你还能坚持多久&#xff01;▼2 依旧是熟悉的配方▼3 到哪儿都不愁工作......▼4 请问&#xff0c;当事喵作何感想&#xff1f;▼5 池塘危险&#xff0c;请勿靠近&#xff01;&#xff08;图源网络&#xff0c;侵删&#xff09;▼6 望周知&#xff01;▼7 实在是无…

Hello Blazor:(13)查找HTML元素对应.razor文件

前言Blazor是基于组件的开发&#xff0c;每个组件都是以一个.razor文件形式存在。当应用程序变得越来越大并且.razor文件的数量和层次结构越来越多时&#xff0c;想很快弄清页面上的HTML元素是由哪个组件生成的&#xff0c;就变得不那么容易了&#xff01;FindRazorSourceFile介…

C++STL之string (转)

在学习cSTL中的string&#xff0c;在这里做个笔记&#xff0c;以供自己以后翻阅和初学者参考。 1&#xff1a;string对象的定义和初始化以及读写 string s1; 默认构造函数&#xff0c;s1为空串 string s2(s1); 将s2初始化为s1的一个副本 string s3("valuee");…

当年的毒王熊猫烧香,现在怎么样了?

全世界只有3.14 % 的人关注了爆炸吧知识放假&#xff0c;小编来到了远在73公里之外的天后宫&#xff0c;终于是了了本命年的一桩心事。回想上一个本命年&#xff0c;当时小编还是沉迷扫雷和蜘蛛纸牌的孩子...但当时却发生了一件令我很不爽的事——“熊猫烧香”席卷全国&#xf…

$query php,phpQuery让php处理html代码像jQuery一样方便

简介如何在php中方便地解析html代码&#xff0c;估计是每个phper都会遇到的问题。用phpQuery就可以让php处理html代码像jQuery一样方便。DEMO我下的是onefile版&#xff1a;phpQuery-0.9.5.386-onefile.zip然后在项目中引用。html文件test.html&#xff1a;Spiderman City Driv…

那个成人总会遇到的小问题……

结语超模君就问问&#xff1a;我还有机会10万&#xff0b;吗&#xff1f;&#xff08;溜了溜了&#xff09;莱布尼茨德国数学家莱布尼茨&#xff0c;被后人誉为“百科全书式的天才”&#xff0c;他的研究涉及逻辑学、力学等40多个领域。他创建了数学理论&#xff1a;微积分学。…

java继承接口和泛型,JavaSE习题 继承接口和泛型

问答题&#xff1a;1.子类在什么情况下可以继承父类友好成员&#xff1f;答&#xff1a;在同一个包内2.子类通过怎样的方法可以隐藏继承的成员变量&#xff1f;答&#xff1a;声明一个与父类相同变量名的成员变量3.子类重写继承的方法原则是什么&#xff1f;答&#xff1a;保证…

Github CodeSpaces 使用及定制化

Github CodeSpaces 使用及定制化IntroGithub 最近推出了很多令人兴奋的新功能&#xff0c;最近使用了 Github CodeSpaces&#xff0c;觉得还是挺不错的&#xff0c;CodeSpaces 相当于自己有了一个云主机&#xff0c;真正实现了云端开发&#xff0c;CodeSpaces 和 Github 做了很…

nat+端口转发,使得宿主机secureCRT可以访问vbox里linux虚拟机

为什么80%的码农都做不了架构师&#xff1f;>>> 环境&#xff1a;vbox或者叫vitrualbox连接虚拟机&#xff0c;由于公司内网不能分配IP&#xff08;不知道是不是这个原因&#xff09;&#xff0c;虚拟机用桥接得不到IP&#xff0c;没法实现虚拟机和宿主互相访问&am…

男人可以有多敷衍?

1 现在更流行「红茶女生」&#xff1f;&#xff08;via.白头叔&#xff09;▼2 谢谢&#xff0c;有被冒犯到&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 天使与恶魔▼4 男朋友可以多敷衍&#xff1f;▼5 你的高原红&#xff0c;像极了妈妈的巴掌印&#xff…

linux 内核代码构架图

转载于:https://www.cnblogs.com/kuainiao/archive/2012/12/17/2822384.html

Win11开始大范围推送!

微软宣布 Windows11 现已开始向更多符合最低硬件要求的电脑推送。预计到 2022 年年中&#xff0c;所有符合条件的电脑都可以免费升级到 Windows 11。微软将根据硬件条件、可靠性、使用时间&#xff0c;及其它会影响升级后使用体验的因素&#xff0c;为 Windows 10 电脑分阶段推…

有什么看起来很难,但是其实很简单的题目

全世界只有3.14 % 的人关注了爆炸吧知识做题其实很简单今天超模君一进办公室就感觉充满“杀气”&#xff0c;果不其然&#xff0c;一抬头就看见小天拿着一张纸对着我坏笑。莫非这家伙又要我折纸&#xff1f;拿过纸张一看&#xff0c;虽然密密麻麻的一大堆公式&#xff0c;但我相…

双11,2分钟狂挣20亿的神秘大厂,急招.NET!

双11小米开门红&#xff0c;2分钟不到突破20亿&#xff0c;于是机智的我又去逛了下小米的招聘官网&#xff1a;招5年左右.NET&#xff0c;35k左右&#xff0c;14薪&#xff0c;要求WPF和自动化&#xff0c;真香&#xff01;回首牛年2个跳槽季&#xff0c;招WPF的大厂太多了&…

炸了!刚刚数学家获得了2020年诺贝尔物理学奖!没想到诺奖也能蝉联.......

全世界只有3.14 % 的人关注了爆炸吧知识就在刚刚&#xff0c;万众瞩目的2020年诺贝尔奖物理学奖获得者确定了&#xff01;他们就是——天体物理学家&#xff08;该领域连续两年获得诺奖&#xff09;物理学奖得主罗格彭罗斯爵士&#xff08;Roger penrose&#xff09;&#xff0…

Envoy实现.NET架构的网关(五)集成Redis实现限流

.NET网关与Gateway实战-Envoy与kong课程什么是限流限流即限制并发量&#xff0c;限制某一段时间只有指定数量的请求进入后台服务器&#xff0c;遇到流量高峰期或者流量突增时&#xff0c;把流量速率限制在系统所能接受的合理范围之内&#xff0c;不至于让系统被高流量击垮。而E…

使用 Daynamic 动态添加属性

所谓的Dynamic 动态类型&#xff0c;页面也要是动态的&#xff08;强撸&#xff09; 很简单的 直接上代码&#xff1a; //案例一 DynamicpersonCollection new ObservableCollection(); for (var i 0; i < 10; i) { dynamic p new ExpandoObject(); ((IDictionary<str…

豆瓣9分+纪录片,每一部都美到窒息......

全世界只有3.14 % 的人关注了爆炸吧知识自然类的纪录片一直是BBC的金字招牌&#xff0c;制作精良的纪录片&#xff0c;不仅能让孩子享受视觉的艺术&#xff0c;还能通过独特的视角去解读大自然&#xff0c;真正激发出孩子探索世界的热情。也适合大人影迷们在看了N部电影后视觉疲…

程序怎么跑着 就卡死,句柄泄漏,内存泄漏了

一&#xff1a;背景 1. 讲故事上个月中旬&#xff0c;星球里的一位朋友在微信找我&#xff0c;说他的程序跑着跑着内存会不断的缓慢增长并无法释放&#xff0c;寻求如何解决 &#xff1f;得&#xff0c;看样子星球还得好好弄&#xff01;&#xff01;&#xff01;&#x1f602;…

活久见!一美国大爷发明了永不掉链子的自行车,垂直踩踏即可驱动

全世界只有3.14 % 的人关注了爆炸吧知识©文丨 直观学机械、自行车网最近&#xff0c;一款能永不掉链子的自行车特别火&#xff0c;咱们今天来看看它长什么样。这款自行车据说是由美国洛杉矶的一位老大爷 Rodger Parker 设计的&#xff0c;名叫&#xff1a;NuBike。设计自行…