.NET 6 Preview 5 中的 ASP.NET Core 更新

.NET 6 Preview 5 中的 ASP.NET Core 更新

.NET 6 Preview 5 现已推出,其中包括对 ASP.NET Core 的许多重大改进。

以下是此预览版中的新功能:

  • .NET 热重载更新 dotnet watch

  • ASP.NET Core SPA 模板更新到 Angular 11 和 React 17

  • 在 SVG foreignObject元素中使用 Razor 语法

  • ActionRenderFragment组件参数指定 null

  • 通过运行时重链接减少 Blazor WebAssembly 下载大小

  • 在 Json.NET 输出格式化程序中写入磁盘之前可配置的缓冲区阈值

  • 用于更好地过滤 Kestrel 日志的子类别

  • 更快地获取和设置 HTTP 标头

  • IIS 的可配置未消费的传入缓冲区大小

开始

要在 .NET 6 Preview 5 中开始使用 ASP.NET Core,请安装 .NET 6 SDK。

如果你在 Windows 上使用 Visual Studio,我们建议安装 Visual Studio 2019 16.11 的最新预览版。Visual Studio 2022 Preview 1也在今天发布,.NET 6 Preview 5 包含在该版本中。如果您使用的是 macOS,我们建议您安装 Visual Studio 2019 for Mac 8.10 的最新预览版。

要使用 .NET MAUI 和 Blazor 设置跨平台原生应用程序,请参阅.NET MAUI 入门指南 中的最新说明。请务必查看宣布 .NET MAUI 预览 5 的博客文章,了解有关此版本中 .NET MAUI 新增功能的所有详细信息。

注意:Visual Studio 2022 预览版 1 尚不支持 .NET MAUI。对于 .NET MAUI 开发,请改用 Visual Studio 2019 16.11 的最新预览版。

要安装用于提前 (AOT) 编译和运行时重新链接的最新 .NET WebAssembly 工具,请从提升的命令提示符运行以下命令:

dotnet workload install microsoft-net-sdk-blazorwebassembly-aot

如果您之前安装了 .NET WebAssembly 工作负载,您可以通过从提升的命令提示符运行以下命令将其更新到 .NET 6 Preview 5:

dotnet workload update

注意:使用 Visual Studio 2022 Preview 1 附带的 .NET 6 Preview 5 SDK 安装可选 SDK 工作负载存在一个已知问题。要解决此问题,请从 https://dot.net/ 安装 .NET 6 Preview 5 SDK安装 Visual Studio 2022 预览版 1 后的 get-dotnet6。

升级现有项目

要将现有的 ASP.NET Core 应用程序从 .NET 6 Preview 4 升级到 .NET 6 Preview 5:

  • 将所有 Microsoft.AspNetCore.* 包引用更新为.6.0.0-preview.5.*

  • 将所有 Microsoft.Extensions.* 包引用更新为.6.0.0-preview.5.*

要将 .NET MAUI Blazor 应用从 .NET 6 Preview 4 升级到 .NET 6 Preview 5,我们建议从使用 .NET 6 Preview 5 SDK 创建的新 .NET MAUI Blazor 项目开始,然后从原始项目复制代码。

查看 .NET 6 的 ASP.NET Core 重大变更的完整列表。

.NET 热重载更新 dotnet watch

我们一直致力于对 .NET 6 的 .NET Hot Reload 进行各种改进。其中一些改进在 .NET 6 Preview 5 中可用,而其他改进仍在进行中,将在未来的预览更新中完善。

您不再需要在 launchSettings.json 中指定hotReloadProfile 以使用dotnet watch 来启用 .NET Hot Reload . 能够支持热重载的项目现在会默认启用 .NET 热重载。

当进行了无法热重载的代码编辑(“粗鲁”编辑)时,dotnet watch现在将询问您是否要重新启动应用程序以应用更改:

watch : Unable to apply hot reload because of a rude edit. Rebuilding the app...
watch : Unable to handle changes to C:\Users\daroth\Desktop\BlazorApp\Pages\Index.razor.
watch : Do you want to restart your app - Yes (y) / No (n) / Always (a) / Never (v)?

这些选项具有以下行为:

  • 选择 将重新启动应用程序。

  • 选择 不会重新启动应用程序,并且会保持应用程序运行而不应用更改。

  • 当无法热重新加载更改时,选择“*始终”*将根据需要重新启动应用程序。

  • 选择 从不 不会重新启动应用程序并避免将来出现提示。

您始终可以使用 Ctrl+R 手动重新启动应用程序。

注意:此版本中存在一个已知问题,即选择“*始终”*仍会继续提示将来进行粗鲁编辑。这将在未来的预览版本中得到解决。

要在使用时禁用对 .NET Hot Reload 的支持dotnet watch,请使用命令行选项。--no-hot-reload

使用 dotnet watch 进行 .NET Hot Reload 现在也将正确检测 Blazor WebAssembly 应用程序中的“粗鲁”编辑。当刷新浏览器或在单独的浏览器 Tab 或浏览器实例中加载应用程序时,应用于 Blazor WebAssembly 应用程序的更改将重新应用于应用程序。

ASP.NET Core SPA 模板更新到 Angular 11 和 React 17

用于 Angular 和 React 的 ASP.NET Core 单页应用 (SPA) 模板已更新为 Angular 11 和 React 17。我们还希望在未来的 .NET 6 预览版中将 Angular 模板进一步更新为 Angular 12,因为 Angular 12 已经正式发布了。

在 SVG foreignObject元素中支持 Razor 语法

您现在可以在 SVGforeignObject元素中使用 Razor 语法,包括使用 Blazor 组件:

<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg"><rect x="0" y="0" rx="10" ry="10" width="200" height="200" stroke="black" fill="none" /><foreignObject x="20" y="20" width="160" height="160"><p>@message</p></foreignObject>
</svg>@code {string message = "Wow, it's so nice that this text wraps like it's HTML...because that's what it is!";
}

我们还进行了大量验证和测试,以确保 Blazor 对 SVG 场景有良好的支持。我们认为 Blazor 的 SVG 支持现在处于良好状态。如果您在此版本的 Blazor 中使用 SVG 遇到任何问题,请通过在GitHub 上创建 Issue 告诉我们。

ActionRenderFragment组件参数指定 null

现在,您可以指定Blazor组件参数值ActionRenderFragment为 null,从而简化采取可选的回调参数或模板参数的新组件。

通过运行时重链接减少 Blazor WebAssembly 下载大小

默认 Blazor WebAssembly 应用程序的最大部分之一是该应用程序依赖的基于 WebAssembly 的 .NET 运行时 ( dotnet.wasm )。Blazor WebAssembly 已经支持从 .NET 核心框架库中修剪未使用的代码。但是运行时的下载大小一直是固定的。

并非每个应用程序都需要所有运行时逻辑。例如,很大一部分运行时逻辑和相关数据文件是针对全球化场景的。这种全球化支持使 Blazor WebAssembly 应用程序能够根据当前文化处理字符串、数字、日期等。但是对于不需要此功能的应用程序,这些数据和逻辑都只是多余的。

不需要全球化功能的 .NET 应用程序可以选择不要它,通过在其项目文件中设置InvariantGlobalization属性为true来使用不变的全球化。在 .NET 5 中,这将允许 Blazor WebAssembly 应用程序避免下载全球化数据,但仍会包含 .NET 运行时中的相关逻辑。

在 .NET 6 Preview 5 中,您现在可以使用 .NET WebAssembly 工具(与用于 .NET WebAssembly AOT 编译的工具相同)重新链接运行时以删除不需要的逻辑并显着减小运行时的大小。如果您安装了 .NET WebAssembly 工作负载,则在您发布应用程序时会自动完成运行时重新链接。使用不变全球化模式时,大小减少尤其显着。

如果您还没有安装 .NET WebAssembly 工具,可以通过从管理员模式的命令提示符运行以下命令来安装:

dotnet workload install microsoft-net-sdk-blazorwebassembly-aot

下表显示了使用 .NET 5 和 .NET 6 的默认 Blazor WebAssembly 项目的dotnet.wasm传输大小:

dotnet.wasm传输大小 (kB)
.NET 5 默认884
.NET 6 默认780
.NET 6 重新链接756
.NET 6 不变模式393

在 Json.NET 输出格式化程序中写入磁盘之前可配置的缓冲区阈值

默认情况下,Newtonsoft.Json 输出格式化程序(output formatter)在缓冲到磁盘之前在内存中缓冲高达 32 KiB 的响应。这是为了避免执行同步 IO,但是这会导致其他副作用,例如线程饥饿和应用程序死锁。但是,如果您的响应大于 32 KiB,则会导致大量可避免的磁盘 I/O。您现在可以在缓冲到磁盘之前配置内存阈值。

public void ConfigureServices(IServiceCollection services)
{services.AddRazorPages().AddNewtonsoftJson(options =>{options.OutputFormatterMemoryBufferThreshold = 48 * 1024;});
}

注意:我们仍然建议使用 System.Text.Json output formatter,除非出于兼容性原因需要 Newtonsoft.Json 序列化程序。System.Text.Json 序列化程序是完全异步的,将有效地适用于任何大小的有效载荷。

用于更好地过滤 Kestrel 日志的子类别

在此更改之前,为 Kestrel 启用详细日志记录非常昂贵,因为所有 Kestrel 共享相同的日志记录类别名称 (Microsoft.AspNetCore.Server.Kestrel )。我们现在将该类别拆分为多个新的子类别:

  • Microsoft.AspNetCore.Server.Kestrel (当前类别):ApplicationError、ConnectionHeadResponseBodyWrite、ApplicationNeverCompleted、RequestBodyStart、RequestBodyDone、RequestBodyNotEntirelyRead、RequestBodyDrainTimedOut、ResponseMinimumDataRateNotSatisfied、InvalidResponseHeaderRemoved、HeartbeatSlow。

  • Microsoft.AspNetCore.Server.Kestrel.BadRequests:ConnectionBadRequest、RequestProcessingError、RequestBodyMinimumDataRateNotSatisfied。

  • Microsoft.AspNetCore.Server.Kestrel.Connections:ConnectionAccepted、ConnectionStart、ConnectionStop、ConnectionPause、ConnectionResume、ConnectionKeepAlive、ConnectionRejected、ConnectionDisconnect、NotAllConnectionsClosedGracefully、NotAllConnectionsAborted、ApplicationAbortedConnection。

  • Microsoft.AspNetCore.Server.Kestrel.Http2: Http2ConnectionError, Http2ConnectionClosing, Http2ConnectionClosed, Http2StreamError, Http2StreamResetAbort, HPackDecodingError, HPackEncodingError, Http2FrameReceived, Http2FrameSending, Http2MaxConcurrentStreamsReached。

  • Microsoft.AspNetCore.Server.Kestrel.Http3: Http3ConnectionError, Http3ConnectionClosing, Http3ConnectionClosed, Http3StreamAbort, Http3FrameReceived, Http3FrameSending。

虽然您现有的规则将继续有效(日志过滤应用具有最长匹配类别前缀的规则),但您现在可以更有选择性地选择启用哪些规则。例如,使用 Debug为 bad requests 启用日志记录的可观察性开销大大降低,可以通过以下配置实现:

{"Logging": {"LogLevel": {"Microsoft.AspNetCore.Kestrel.BadRequests": "Debug"}}
}

更快地获取和设置 HTTP 头

我们添加了新的 API 以将 System.Net.Http.HeaderNames 所有可用的通用标头公开为属性,从而使 Microsoft.AspNetCore.Http.IHeaderDictionary API 更易于使用。例如,下面的内联中间件使用新 API 获取/设置请求和响应标头:

app.Use(async (context, next) =>
{var hostHeader = context.Request.Headers.Host;app.Logger.LogInformation("Host header: {host}", hostHeader);context.Response.Headers.XPoweredBy = "ASP.NET Core 6.0-preview5";await next.Invoke(context);var dateHeader = context.Response.Headers.Date;app.Logger.LogInformation("Response date: {date}", dateHeader);
});

对于已实现的标头,get/set访问器是通过直接转到字段并绕过查找来实现的。对于未实现的标头,访问者可以绕过针对已实现标头的初始查找并直接执行查找 Dictionary<string, StringValues>。这导致两种情况下的访问速度更快。

方法分支类型平均操作/秒Delta
GetHeaders预览4纯文本25.793 纳秒38,770,569.6——
GetHeaders预览5纯文本12.775 纳秒78,279,480.0+101.9%
GetHeaders预览4常见的121.355 纳秒8,240,299.3——
GetHeaders预览5常见的37.598 纳秒26,597,474.6+222.8%
GetHeaders预览4未知366.456 纳秒2,728,840.7——
GetHeaders预览5未知223.472 纳秒4,474,824.0+64.0%






SetHeaders预览4纯文本49.324 纳秒20,273,931.8——
SetHeaders预览5纯文本34.996 纳秒28,574,778.8+40.9%
SetHeaders预览4常见的635.060 纳秒1,574,654.3——
SetHeaders预览5常见的108.041 纳秒9,255,723.7+487.7%
SetHeaders预览4未知1,439.945 纳秒694,470.8——
SetHeaders预览5未知517.067 纳秒1,933,985.7+178.4%

IIS 的可配置未消耗传入缓冲区大小

在此更改之前,IIS 服务器仅缓冲 64 KiB 的未使用请求正文。这导致读取被限制在最大大小,这会影响大型请求正文(例如大文件上传)时的性能。在 .NET 6 Preview 5 中,我们将默认缓冲区大小从 64 KiB 更改为 1 MiB,这应该会提高大型上传的吞吐量。在我们的测试中,过去需要 9 秒的 700 MiB 上传现在只需 2.5 秒。

较大缓冲区大小的缺点是,当应用程序不能快速读取请求正文时,每个请求的内存消耗会增加。因此,除了更改默认缓冲区大小外,我们还使缓冲区大小可配置,允许您根据工作负载进行调整。

public void ConfigureServices(IServiceCollection services)
{services.Configure<IISServerOptions>(options =>{options.MaxRequestBodySize = 64 * 1024;});
}

给予反馈

我们希望您喜欢 .NET 6 中 ASP.NET Core 的这个预览版本。我们很想知道您对这个版本的体验。通过在GitHub 上提交问题让我们知道您的想法。

感谢您试用 ASP.NET Core!

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

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

相关文章

每日一笑 | 对不起,我还没下班...

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

差异分析定位Ring 3保护模块

差异分析定位Ring 3保护模块 由于保护模块通常会Hook操作系统的原生DLL接口来进行保护&#xff0c;所以可以采用差异比较原生DLL文件和加载到内存中的原生DLL直接的差别来定位Ring 3模块。 在分析的过程中&#xff0c;为了防止被Ring 3保护模块发现&#xff0c;暂时可以先把除了…

html 输入框自动缩短 一行内显示,JQuery UI组合框自动补全功能改进版(即时全部显示+input内容保存)...

JQuery UI Autocomplete(自动补全)功能在input前端设计中非常有用&#xff0c;最近一个项目正好用到&#xff0c;仔细研究了下组合框(combobox)的自动补全部分&#xff0c;官方地址是&#xff1a;https://jqueryui.com/autocomplete/#combobox。官方的功能需要一个额外下拉按钮…

Magicodes.IE 2.5.4.2发布

Magicode.IE&#xff0c;导入导出通用库&#xff0c;支持Dto导入导出、模板导出、花式导出以及动态导出&#xff0c;支持Excel、Csv、Word、Pdf和Html。Github&#xff1a;https://github.com/dotnetcore/Magicodes.IE码云&#xff08;手动同步&#xff0c;不维护&#xff09;&…

耗时6年的DK博物科普巨著,全面提升孩子的认知高度

▲数据汪特别推荐点击上图进入玩酷屋小木用真金白银来给大家送礼物啦&#xff0c;特别感谢这些年一直以来大家对我们的支持&#xff0c;才让我们越做越好。&#xff08;点我参与送礼活动&#xff09;小木每次带侄子去郊游时&#xff0c;侄子总是会不断地提问&#xff0c;“这是…

磁盘 I/O性能指标

磁盘 I/O性能指标 在介绍磁盘 I/O 监控命令前&#xff0c;我们需要了解磁盘 I/O 性能监控的指标&#xff0c;以及每个指标的所揭示的磁盘某方面的性能。磁盘I/O 性能监控的指标主要包括&#xff1a; 1)每秒 I/O 数&#xff08;IOPS 或 tps&#xff09; 对于磁盘来说&#xff0…

android fragmentstatepageradapter框架,安卓爬坑指南之FragmentStatePagerAdapter

一次开发中&#xff0c;用到了viewpager嵌套viewpager&#xff0c;结果就踩到了这么一个坑。先上图&#xff1a;image.png图片中显示的界面布局和遇到的问题是这样的&#xff1a;首页发现版块是一个fragment&#xff0c;这个fragment中放了一个viewpager&#xff0c;这个viewpa…

DotNetCommon-搜集.neter开发常用的功能

介绍搜集.neter开发常用的功能&#xff0c;运行环境&#xff1a;.net4.7&#xff1b;.netstandard2.0&#xff1b;net5.0&#xff1b;得益于在BC公司负责维护底层框架代码&#xff0c;自己的精力逐渐从 “全栈” 转移到专注于后端。于是&#xff0c;以BC公司的公共类库为基础&a…

每日一笑 | 一个男人逐渐变心的过程

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

html 表格 左侧表头,左侧是表头的JS表格控件(自写,网上没有的)

今天&#xff0c;项目中要用到该表格&#xff0c;找了一遍&#xff0c;发现没有合适的&#xff0c;于是自己动手丰衣足食。最终呈现效果如上图&#xff0c;1、左侧是表头的表格数据展现&#xff0c;2、支持多行&#xff0c;多表头3、固定表头的功能4、能够支持标题5、获取表格中…

一个人的夜晚,让这些公众号来温暖你。

“外表的美只能取悦于人的眼睛&#xff0c;而内在的美却能感染人的灵魂”。阅读的内容决定了你的视野&#xff0c;转发的内容展现了你的底蕴。这些优质内容&#xff0c;你值得拥有&#xff0c;看下去你就知道。【关注方式&#xff1a;长按二维码&#xff0c;选择“识别图中二维…

grub参数介绍。

为什么80%的码农都做不了架构师&#xff1f;>>> grub的配置文件在/boot/grub/grub.conf。/etc/grub.conf和/boot/grub/menu.lst都是指向这个文件的软连接。 grub启动时&#xff0c;会寻找menu.lst文件&#xff0c;如果找不到&#xff0c;则进入grub>交互界面。…

又一次Task.Wait引起的教训

最近一用户在使用BeetleX.HttpClient组件并发访问延时比较高的https服务时引起了卡死现像。由于组件更多使用场景是内部服务和非https&#xff0c;一直没有这情况出现;但用户提供测试场景下这情况必现&#xff0c;所以翻查了一些相关代码。protected virtual void OnSslAuthent…

html盒模型向上浮动,HTML5盒模型、浮动和定位

在此之前我们先了解一下块级元素和行内元素的区别一、块级元素1、总是从新的一行开始2、高度、宽度都是可控的3、宽度没有设置时&#xff0c;默认为100%4、块级元素中可以包含块级元素和行内元素二、行内元素1、和其他元素都在一行2、高度、宽度以及内边距都是不可控的3、宽高就…

关于一个js栈溢出的异常

快一年没写web端的东西了&#xff0c;今天写了点东西。唉&#xff0c;快忘了&#xff0c;不过还好&#xff0c;基本的开发技能还是练出来了&#xff0c;这东西不能忘。 另外在这里贴点代码&#xff0c;预防以后会出现类似的情况。 javascript代码 //列表数据var appText new A…

科学中有故事,故事中有科学

▲数据汪特别推荐点击上图进入玩酷屋小木用真金白银来给大家送礼物啦&#xff0c;特别感谢这些年一直以来大家对我们的支持&#xff0c;才让我们越做越好。&#xff08;点我参与送礼活动&#xff09;孩子缺什么&#xff1f;不应该只是知识是独立思考意识、逻辑思维能力基于科学…

[译]WPF开源控件扩展库ControlzEx

原文链接&#xff1a;https://github.com/ControlzEx/ControlzEx翻译&#xff1a;沙漠尽头的狼&#xff08;谷歌及百度提供翻译支持&#xff09;Shared Controlz for WPF支持 .NET Framework&#xff08;4.5.2、4.6.2 及更高版本&#xff09;、.NET Core (3.1) 和 .NET 5&#…

html图片分开,webpack单独分离打包css,css里引用的图片路径错误,怎么解决?

现在我的这个项目是将css和js单独打包出来&#xff0c;打包后的目录结构和打包前一致。打包前&#xff1a;从这张图可以看到&#xff0c;如果是css文件夹根目录下的css文件引用images文件夹下的图片应该使用../就可以了&#xff0c;如果是css下某一个文件夹下面的css引用图片的…

每日一笑 | 程序员千万不能轻易去网吧!

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

.Net Core with 微服务 - Consul 注册中心

上一次我们介绍了 Ocelot 网关的基本用法。这次我们开始介绍服务注册发现组件 Consul 的简单使用方法。服务注册发现首先先让我们回顾下服务注册发现的概念。在实施微服务之后&#xff0c;我们的调用都变成了服务间的调用。服务间调用需要知道IP、端口等信息。再没有微服务之前…