.NET 8 是 .NET 7 的后继版本。 它将作为长期支持 (LTS) 版本得到三年的支持。
性能提升
默认情况下会启用一种名为动态配置文件引导优化 (PGO) 的新代码生成器,它可以根据实际使用情况优化代码,并且可以将应用程序的性能提高高达 20%。现在支持的 AVX-512 指令集能够对 512 位数据向量执行并行操作,这意味着可以在更短的时间内处理更多的数据。原始类型(数字及其他类型)现在实现了新的可格式化和可解析接口,这使它们能够直接格式化和解析为 UTF-8,而无需任何转码开销。
.NET 8 运行时包括对性能、垃圾回收以及核心和扩展库的改进。 它还包括移动应用的新全球化模式,以及 COM 互操作和配置绑定的新源生成器。C# 12 随 .NET 8 SDK 一起提供。ASP.NET Core 包括对 Blazor、SignalR、最小 API、本机 AOT、Kestrel 和 HTTP.sys 服务器以及身份验证和授权的改进。Entity Framework Core 包括对复杂类型对象、基元类型集合、JSON 列映射、原始 SQL 查询、延迟加载、跟踪实体访问、模型构建、数学翻译和其他功能的改进。 它还包括新HierarchyId
类型。
ASP.NET Core 8.0
全堆栈 Web UI
随着 .NET 8 的发布,Blazor 已成为全堆栈 Web UI 框架,可用于开发在组件或页面级别呈现内容的应用,其中包含:
- 静态服务器呈现(也称为静态服务器端呈现 [静态 SSR]),用于在服务器上生成静态 HTML。
- 交互式服务器呈现(也称为交互式服务器端呈现 [交互式 SSR]),用于在服务器上生成具有预呈现的交互式组件。
- 交互式 WebAssembly 呈现(也称为客户端呈现 [CSR],始终假定为交互式),用于在客户端上生成具有服务器端预呈现的交互式组件。
- 交互式自动(自动)呈现,最初使用服务器端 ASP.NET Core 运行时进行内容呈现和交互。 下载 Blazor 捆绑包并激活 WebAssembly 运行时后,使用客户端上的 .NET WebAssembly 运行时进行后续呈现和交互。 交互式自动呈现通常提供最快的应用启动体验。
EF Core
EF8 需要 .NET 8 SDK 才能生成,并且需要运行 .NET 8 运行时。 EF8 无法在早期 .NET 版本上运行,也无法在 .NET Framework 上运行。
使用复杂类型的值对象
保存到数据库的对象可以分为三大类:
- 非结构化并保存单个值的对象。 例如,
int
、Guid
、string
、IPAddress
。 这些类型(有点宽泛)称为“基元类型”。 - 为保存多个值而构造的对象,对象的标识由键值定义。 例如:
Blog
、Post
、Customer
。 它们称为“实体类型”。 - 为保存多个值而构造的对象,但对象没有用键定义的标识。 例如:
Address
、Coordinate
。
在 EF8 之前,没有很好的方法来映射第三种类型的对象。 从属类型是可以使用的,但由于从属类型实际上是实体类型,因此它们具有基于键值的语义,即便该键值处于隐藏状态时也是如此。
EF8 现在支持“复杂类型”来涵盖此第三种类型的对象。 复杂类型对象:
.NET 8 容器增强功能
每个 .NET 映像都包含一个非 root 用户,从而通过单行配置启用更安全的容器。.NET SDK 工具无需 Dockerfile 即可发布容器映像,并且默认情况下是非 root 的。由于 .NET 基础映像更小,因此可以更快地部署容器化应用程序 - 包括我们映像的新实验变体,这些变体可为本机 AOT 提供真正最小的应用程序大小。选择使用新的 Chiseled Ubuntu 映像变体进行更多安全强化,以进一步减少攻击面。使用 Dockerfile 或 SDK 工具,为任何架构构建应用程序和容器映像