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