当前位置: 首页 > news >正文

.NET 8 Release Candidate 1 (RC1)现已发布,包括许多针对ASP.NET Core的重要改进!

.NET 8 Release Candidate 1 (RC1)发布:ASP.NET Core重大改进来袭!

近日,.NET 8 Release Candidate 1 (RC1)正式发布,这是在今年晚些时候计划发布的最终 .NET 8 版本之前的两个候选版本中的第一个。此版本包含了大部分计划中的功能和变更,可供开发者提前尝鲜。不过,部分领域(尤其是 Blazor)仍有重大变更待完成,预计将在下一个 .NET 8 候选版本中落地。

新功能概览

服务器和中间件

默认情况下,HTTP/3 被禁用。此前启用 HTTP/3 时,某些防病毒软件会在启动带有调试的应用程序时提示是否允许网络访问,影响开发体验。因此,此次恢复到 .NET 7 的行为。若要重新启用 HTTP/3,可通过以下两种方式:

为每个端点设置
var builder = WebApplication.CreateBuilder(args);builder.WebHost.ConfigureKestrel((context, options) =>
{options.ListenAnyIP(5001, listenOptions =>{listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;listenOptions.UseHttps();});
});
配置默认协议
var builder = WebApplication.CreateBuilder(args);builder.WebHost.ConfigureKestrel((context, options) =>
{options.ConfigureEndpointDefaults(listenOptions =>{listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;listenOptions.UseHttps();});
});

API 编写

在最小 API、MVC 和 SignalR 中支持键入服务。从 .NET 8 RC1 起,开发者可使用 [FromKeyedServices("keyName")] 属性注释目标参数来利用此特性。示例代码如下:

using Microsoft.AspNetCore.Mvc;var builder = WebApplication.CreateBuilder(args);builder.Services.AddKeyedSingleton<ICache, BigCache>("big");
builder.Services.AddKeyedSingleton<ICache, SmallCache>("small");
builder.Services.AddControllers();var app = builder.Build();app.MapGet("/big", ([FromKeyedServices("big")] ICache bigCache) => bigCache.Get("date"));app.MapGet("/small", ([FromKeyedServices("small")] ICache smallCache) => smallCache.Get("date"));app.MapControllers();app.Run();public interface ICache
{object Get(string key);
}
public class BigCache : ICache
{public object Get(string key) => $"Resolving {key} from big cache.";
}public class SmallCache : ICache
{public object Get(string key) => $"Resolving {key} from small cache.";
}[ApiController]
[Route("/cache")]
public class CustomServicesApiController : Controller
{[HttpGet("big-cache")]public ActionResult<object> GetOk([FromKeyedServices("big")] ICache cache){return cache.Get("data-mvc");}
}public class MyHub : Hub
{public void Method([FromKeyedServices("small")] ICache cache){Console.WriteLine(cache.Get("signalr"));}
}

Blazor

Blazor Web App 模板更新

在 .NET 8 中,Blazor 功能不断增强,可满足各类 Web UI 需求。现在,可根据请求静态地从服务器呈现 Blazor 组件,还能实现体验增强、导航和表单处理增强等功能。为优化加载时间,Blazor 能在运行时自动选择使用 Blazor Server 或 Blazor WebAssembly。

此版本中,Blazor Web App 模板得到清理和改进,新增多个配置选项:

  • 使用交互式 WebAssembly 组件:支持基于 Blazor WebAssembly 的交互式 WebAssembly 渲染模式。
  • 使用交互式 Server 组件:支持基于 Blazor Server 的交互式 Server 渲染模式。
  • 包括示例页面:选择后,项目将包含基于 Bootstrap 样式的示例页面和布局;若只需空项目,可禁用该选项。

若同时选择 WebAssembly 和 Server 渲染模式,模板将使用自动渲染模式,先使用 Server 模式,待运行时下载完成后切换到 WebAssembly 渲染模式。

此外,模板的文件结构和组件也有诸多改进,如组件名称和内容清理、移除不必要的属性等,简化了应用程序交互性的实现过程。

从额外的程序集中发现用于静态服务器呈现的组件

可使用 AddAdditionalAssemblies() 方法配置额外程序集,用于发现静态服务器呈现的 Blazor 组件:

app.MapRazorComponents<App>().AddAdditionalAssemblies(typeof(Counter).Assembly);
路由改进

Blazor 路由实现与 ASP.NET Core 路由统一,为 Blazor 路由器添加了复杂段、默认值和所有内置路由约束的支持。

触发页面刷新

调用 NavigationManager.Refresh() 可触发页面刷新,若可能使用增强的页面导航刷新,否则触发完整页面刷新;使用 NavigationManager.Refresh(forceReload: true) 可强制执行完整页面刷新。

将任意属性传递给 QuickGrid

QuickGrid 组件现在可将额外属性传递给呈现的元素:

<QuickGrid Items="@FilteredPeople" custom-attribute="somevalue" class="custom-class-attribute">
确定表单字段是否具有相关的验证消息

新 API EditContext.IsValid(FieldIdentifier) 可用于确定字段是否有效,无需获取验证消息。

配置.NET WebAssembly 运行时

可在运行时使用 configureRuntime 函数配置 WebAssembly 上的各种 .NET 运行时选项:

<script>Blazor.start({configureRuntime: dotnet => {dotnet.withEnvironmentVariable("CONFIGURE_RUNTIME", "true");}});
</script>
在预先编译(AOT)编译后修剪.NET IL

新的 MSBuild 选项可在执行预先编译(AOT)到 WebAssembly 后删除编译方法的 .NET IL,测试显示可将 _framework 文件夹大小减小 1.7% 到 4.2%:

<PropertyGroup><RunAOTCompilation>true</RunAOTCompilation><WasmStripILAfterAOT>true</WasmStripILAfterAOT>
</PropertyGroup>

Identity

移除 username 属性,简化映射的身份 API,使用户名和电子邮件相同。

单页应用程序(SPA)

Visual Studio 模板用于使用 ASP.NET Core 与流行前端 JavaScript 框架(如 Angular、React 和 Vue)时,支持标准的 .NET 模板选项,如指定目标 .NET 框架版本、启用 OpenAPI 支持等。

度量

在 .NET 8 RC1 中,新的度量重命名以遵循 OpenTelemetry Semantic Conventions。此更改基于用户和库作者的反馈,有助于 .NET 的内置度量和更广泛的 .NET 生态系统遵循现有标准。例如,ASP.NET Core 的主要 HTTP 度量与 OpenTelemetry 的计数器完全匹配,其他计数器也使用语义约定的命名标准。

已知问题

ASP.NET Redis 基于输出缓存

在 ASP.NET 中,基于 Redis 的输出缓存存在回归问题,此功能在 RC1 中无法工作,不过已找到原因并将在 RC2 中解决。

Blazor Web App 模板创建多个计数器组件

启用交互式 WebAssembly 组件时,模板生成了不必要的组件。可将服务器项目中的组件指令复制到客户端项目后删除该组件,然后在 Program.cs 中调用 Counter 以发现该组件。

开始使用

若要使用 .NET 8 RC1 中的 ASP.NET Core,需安装 .NET 8 SDK。使用 Windows 并使用 Visual Studio 的开发者,建议安装最新的 Visual Studio 2022 预览版;使用 Visual Studio Code 的开发者,可尝试新的 C# Dev Kit。

若要将现有的 ASP.NET Core 应用程序从 .NET 8 预览 7 升级到 .NET 8 RC1,需将应用程序的目标框架更新为 .net8.0,并将所有 Microsoft.AspNetCore.* 和 Microsoft.Extensions.* 包引用更新为 .8.0.0-rc.1.*。同时,建议查看 ASP.NET Core .NET 8 中的破坏性变更的完整列表。

总体而言,.NET 8 Release Candidate 1 (RC1) 为 ASP.NET Core 带来了众多实用的新功能和改进,尽管存在一些已知问题,但仍值得开发者提前尝试,为后续项目开发做好准备。开发者可通过在 GitHub 上提交问题,反馈对这些新改进的看法。 ======================================================================
前些天发现了一个比较好玩的人工智能学习网站,通俗易懂,风趣幽默,可以了解了解AI基础知识,人工智能教程,不是一堆数学公式和算法的那种,用各种举例子来学习,读起来比较轻松,有兴趣可以看一下。
人工智能教程

http://www.dtcms.com/a/285880.html

相关文章:

  • 从复合变量到分组分析:piecewiseSEM 解析生态系统多因子交互作用
  • 深度剖析:最新发布的ChatGPT Agent 技术架构与应用场景
  • 专题:2025智能体研究报告|附70份报告PDF、原数据表汇总下载
  • NJU 凸优化导论(8) Lagrange Dual 拉格朗日对偶
  • Kotlin集合分组
  • 解决selenium元素定位不到疑难杂症
  • TCL 电视安装 APK 文件主要有 U 盘安装——仙盟创梦IDE
  • nastools继任者?极空间部署影视自动化订阅系统『MediaMaster』
  • echarts dataZoom 文本显示不完整
  • 响应式编程入门教程第六节:进阶?Combine、Merge、SelectMany 与错误处理
  • 【怜渠客】简单实现手机云控Windows电脑锁屏
  • MySQL中的锁有哪些
  • 【软件重构】如何避免意外冗余
  • 一文入门深度学习(以医学图像分割为例)
  • 【机器学习深度学习】LoRA 与 QLoRA:大模型高效微调的进阶指南
  • 【华为机试】70. 爬楼梯
  • 快速安装GitLab指南
  • mix-blend-mode的了解使用
  • git 介绍与使用教程
  • LP-MSPM0G3507学习--05管脚中断
  • 如何 ASP.NET Core 中使用 WebSocket
  • HTTP性能优化实战技术文章大纲
  • final 使用
  • 实现库存显示和状态按钮的Question
  • 数据统计模块后端架构解析:从Controller到SQL的ECharts数据对接实践
  • Spring介绍以及IOC和AOP的实现
  • 某邮生活旋转验证码逆向
  • Ansible + Shell 服务器巡检脚本
  • 如何使用Python将HTML格式的文本转换为Markdown格式?
  • UDP 协议下一发一收通信程序的实现与解析