.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,可通过以下两种方式:

为每个端点设置
csharp 复制代码
var builder = WebApplication.CreateBuilder(args);

builder.WebHost.ConfigureKestrel((context, options) =>
{
    options.ListenAnyIP(5001, listenOptions =>
    {
        listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
        listenOptions.UseHttps();
    });
});
配置默认协议
csharp 复制代码
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")] 属性注释目标参数来利用此特性。示例代码如下:

csharp 复制代码
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 组件:

csharp 复制代码
app.MapRazorComponents<App>()
    .AddAdditionalAssemblies(typeof(Counter).Assembly);
路由改进

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

触发页面刷新

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

将任意属性传递给 QuickGrid

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

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

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

配置.NET WebAssembly 运行时

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

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

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

xml 复制代码
<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基础知识,人工智能教程,不是一堆数学公式和算法的那种,用各种举例子来学习,读起来比较轻松,有兴趣可以看一下。
人工智能教程

相关推荐
zm-v-159304339863 小时前
Copula 回归与结构方程模型:R 语言构建多变量因果关系网络
数据挖掘·回归·r语言
王维志5 小时前
ASP.NET Core Web API 内存缓存(IMemoryCache)入门指南
后端·缓存·c#·asp.net·.net
唐青枫7 小时前
C#.NET 仓储模式详解
c#·.net
梦想的初衷~7 小时前
基于现代R语言【Tidyverse、Tidymodel】的机器学习方法
开发语言·机器学习·r语言
Teacher.chenchong8 小时前
现代R语言机器学习:Tidymodel/Tidyverse语法+回归/树模型/集成学习/SVM/深度学习/降维/聚类分类与科研绘图可视化
机器学习·回归·r语言
星座5289 小时前
基于现代R语言【Tidyverse、Tidymodel】的机器学习方法与案例分析
机器学习·r语言·tidyverse·tidymodel
斯是 陋室18 小时前
在CentOS7.9服务器上安装.NET 8.0 SDK
运维·服务器·开发语言·c++·c#·云计算·.net
Chef_Chen1 天前
从0开始学习R语言--Day49--Lasso-Cox 回归
学习·回归·r语言
程序视点1 天前
Microsoft .Net 运行库离线合集包专业解析
前端·后端·.net