What‘s new in .NET 7

作者:Genevieve Warren - Content Developer for .NET docs,Microsoft
翻译:Alan Wang
校对:李卫涵 - 微软最有价值专家(MVP)
排版:Rani Sun

.NET 7 是 .NET 6 的后继版本,专注于统一、现代、简单和快速。.NET 7 将作为标准期限支持(STS)版本(以前称为当前版本)支持18个月
本文列出了 .NET 7 的新特性,并提供了指向每个功能的详细信息的链接。

性能

性能是 .NET 7 的一个重点,它的所有特性都是考虑到性能设计的。此外,.NET 7 还包括以下纯粹针对性能的增强:

  • 栈上替换(OSR)是分层编译的补充。它允许运行时在执行过程中(也就是“在堆上”)更改当前运行方法所执行的代码。长时间运行的代码可以在执行过程中切换到更优版本。
  • Profile-guided Optimization(PGO)现在与 OSR 一起使用,且更容易启用(通过将<TieredPGO>true</TieredPGO>添加到你的项目文件)。PGO 还可以检测和优化其他东西,比如委托。
  • 改进了 Arm 64 的代码生成。
  • Native AOT 以目标平台的文件格式生成一个独立的可执行文件,而没有外部依赖。它完全原生,没有 IL 或 JIT,并提供了快速的启动时间和一个小型的自包含部署。在 .NET 7 中,Native AOT 专注于控制台应用程序,并要求对应用程序进行修剪。
  • Mono 运行时性能改进,为 Blazor WebAssembly、Android,以及 iOS 应用程序提供助力。

想要详细了解使得 .NET 7 如此快速的专注性能的特性,请查阅博客文章 .NET 7 中的性能改进

System.Text.Json 序列化

.NET 7 包括在以下领域对 System.Text.Json 序列化的改进:

  • 契约定制使你能够更好地控制类型的序列化和反序列化方式。更多信息请查阅定制一个 JSON 契约
  • 用户定义类型层次结构的多态序列化。更多信息请查阅序列化派生类属性
  • Required Members 的支持,这些属性必须存在于 JSON 有效负载中才能成功反序列化。更多信息请查阅 Required properties

有关这些和其他更新的信息,请查阅博客文章 .NET 7 中 System.Text.Json 的新增内容

泛型数学

.NET 7 和 C# 11 包括一些创新,允许你一般化执行数学运算,也就是说,无需知道你使用的确切类型。例如,如果你想编写一个方法来添加两个数字,从前,你必须为每个类型添加方法重载。而现在,你可以编写一个泛型方法,其中类型参数被约束为一个类数字类型。更多信息请查阅文章泛型数学和博客文章泛型数学

正则表达式

.NET 的正则表达式库在 .NET 7中实现了显著的功能和性能改进:

  • 新选项
    xref:System.Text.RegularExpressions.RegexOptions.NonBacktracking?displayProperty=nameWithType 支持使用一种能够避免回溯并保证输入长度的线性时间处理的方法进行匹配。非回溯引擎不能用于从右到左的搜索,并且有一些其他限制,但是对于所有的正则表达式和输入来说都很快。
  • 正则表达式的 Source Generators 是全新的。Source Generators
    会在编译时构建一个优化模式的引擎,从而提供吞吐量性能优势。生成的源代码是你项目的一部分,所以你可以查看并调试它。此外,新的 source-generator 诊断信息 SYSLIB1045 会提醒你使用 xref:System.Text.RegularExpressions.Regex 的位置,这些位置可以转换为 source generator。更多信息请查阅 .NET regular expression source generators
  • 对于不区分大小写的搜索,.NET 有巨大的性能提升。这是因为,指定 xref:System.Text.RegularExpressions.RegexOptions.IgnoreCase?displayProperty=nameWithType 不再对模式中的每个字符和输入的每个字符调用xref:System.Char.ToLower%2A。相反,所有与大小写相关的工作都是在构造 xref:System.Text.RegularExpressions.Regex 时完成的。
  • xref:System.Text.RegularExpressions.Regex 如今对一些 API 支持 Spans。作为此支持的一部分,还添加了以下新方法:
    • xref:System.Text.RegularExpressions.Regex.EnumerateMatches%2A?displayProperty=nameWithType
    • xref:System.Text.RegularExpressions.Regex.Count%2A?displayProperty=nameWithType
    • xref:System.Text.RegularExpressions.Regex.IsMatch(System.ReadOnlySpan{System.Char})?displayProperty=nameWithType(以及一些其他重载)

更多有关这些改进和其他改进的信息,请查阅博客文章 .NET 7 中的正则表达式改进

.NET libraries

.NET library APIs 做了很多改进。其中一些在本文其他地方提到。下表总结了一些其他内容。

描述API补充信息
在 xref:System.TimeSpan、xref:System.TimeOnly、xref:System.DateTime,以及 xref:System.DateTimeOffset types 中支持微秒和纳秒在这里插入图片描述这些 API 意味着你不再需要对“tick”值进行计算来确定微秒和纳秒值。更多信息请查阅博客文章 .NET 7 Preview 4
用于读取、写入、压缩和提取 Tar 压缩文件的 APIxref:System.Formats.Tar?displayProperty=fullName更多信息请查阅博客文章 .NET 7 Preview 4 以及 .NET 7 Preview 6
限流 API,通过将流量保持在安全级别来保护资源xref:System.Threading.RateLimiting.RateLimiter and others in the System.Threading.RateLimiting NuGet package更多信息请查阅 Rate limit an HTTP handler in .NET and Announcing rate limiting for .NET
用于从 xref:System.IO.Stream 中读取所有数据的 API在这里插入图片描述xref:System.IO.Stream.Read%2A?displayProperty=nameWithType 返回的数据可能少于流中可用的数据。新的 ReadExactly 方法将准确地读取请求的字节数, 新的 ReadAtLeast 方法则会至少读取请求的字节数。更多信息请查阅博客文章 .NET 7 Preview 5
适用于 DateOnlyTimeOnlyInt128UInt128,以及 Half 的转换器在这里插入图片描述类型转换器通常用于将值类型与字符串类型相互转换。这些新的 API 为最近添加的类型添加类型转换器。
对 xref:Microsoft.Extensions.Caching.Memory.IMemoryCache 的 Metrics 支持在这里插入图片描述xref:Microsoft.Extensions.Caching.Memory.MemoryCache.GetCurrentStatistics 允许你使用 event counters 或 metrics API 来跟踪一个或多个内存缓存的统计信息。更多信息请查阅博客文章 .NET 7 Preview 4
用于获取和设置 Unix 文件权限的 API在这里插入图片描述更多信息请查阅博客文章 .NET 7 Preview 7
用于指示字符串中预期语法类型的 Attributexref:System.Diagnostics.CodeAnalysis.StringSyntaxAttribute例如,你可以通过 [StringSyntax(StringSyntaxAttribute.Regex)] 属性参数来指定一个 string 参数需要正则表达式。
在浏览器或其他 WebAssembly 架构中运行时与 JavaScript 互操作的 APIxref:System.Runtime.InteropServices.JavaScript?displayProperty=fullNameJavaScript 应用程序可以使用 .NET 7 中扩展的 WebAssembly 支持来复用 JavaScript 中的 .NET libraries。更多信息请查阅 Use .NET from any JavaScript app in .NET 7

可观测性

.NET 7 改进了可观测性。可观测性可帮助你了解应用在伸缩和技术复杂性增加时的状态。.NET的可观测性实现主要是围绕 OpenTelemetry 构建的。改进包括:

  • 新的 xref:System.Diagnostics.Activity.CurrentChanged?displayProperty=nameWithType 事件,可用于检测托管线程的 span context 何时改变。
  • xref:System.Diagnostics.Activity properties 新的高性能枚举器方法:xref:System.Diagnostics.Activity.EnumerateTagObjects,xref:System.Diagnostics.Activity.EnumerateLinks,以及 xref:System.Diagnostics.Activity.EnumerateEvents。

更多信息请查阅博客文章 .NET 7 Preview 4

.NET SDK

.NET 7 SDK 改进了 CLI 模板体验。它还支持发布到容器,以及使用 NuGet 进行集中包管理。

Templates

dotnet new 命令以及创建模版有了许多受欢迎的改进。

dotnet new

dotnet new CLI 命令(基于模版创建新项目、配置文件或解决方案),现支持 tab completion 搜索:

  • 可用模版名称
  • 模版选项
  • 允许选项值

此外,为了更好地保持一致性,installuninstallsearchlist以及 update 子命令都不再带有 -- 前缀。

Authoring

模版约束是 .NET 7 的一个新概念,用于定义允许模版使用的上下文。Constraints 可以帮助模版引擎确定应在 dotnet new list 等命令中显示的模版。你可以将你的模版约束到操作系统、模版引擎服务(例如,Visual Studio 中的 .NET CLI 或 New Project 对话),以及已安装的工作负载。在你的模版配置文件中定义约束。同样,你也可以在模板配置文件中注释允许多个值。例如,web 模板允许多种形式的认证。
更多信息请查看博客文章 .NET 7 Preview 6

发布到容器

容器是在云中分发和运行多种应用程序和服务的最简单的方法之一。容器镜像现在是 .NET SDK 所支持的输出类型,你可以使用 dotnet publish 创建应用程序的容器化版本。关于本特性的更多信息请查阅宣布对 .NET SDK 的内置容器支持。教程可查阅使用 dotnet publish 发布容器化 .NET 应用程序

集中包管理

你现在可以使用 NuGet 集中包管理(CPM)功能从一个位置管理项目中的常见依赖项。要启用它,请将 Directory.Packages.props 文件添加到存储库的根目录中。在此文件中,将 MSBuild 属性 ManagePackageVersionsCentrally 设置为 true,并使用 PackageVersion 项为常见包依赖项添加版本。然后,在单个项目文件中,可以省略引用集中管理包的任何 PackageReference 项的 Version 属性。
更多信息请查阅集中包管理

P/Invoke 源代码生成

.NET 7 在 C# 中引入了用于平台调用(P/Invokes)的源代码生成器。源生成器在 staticpartial 方法中查找 xref:System.Runtime.InteropServices.LibraryImportAttribute,以触发编译时编组代码的源代码生成。通过编译时生成编组代码,运行时不需要生成 IL Stub,就像使用 xref:System.Runtime.InteropServices.DllImportAttribute 时一样。源代码生成器改进了应用程序性能,且允许应用程序 AOT 编译。更多信息请查阅 Source generation for platform invokesUse custom marshallers in source-generated P/Invokes

相关发布

本章节包涵部分与 .NET 7 发布重合的相关产品信息。

C# 11

C# 11 包含泛型数学支持、原始字符串、file-scoped 类型,以及其他新功能。更多信息请查阅 What’s new in C# 11

.NET MAUI

.NET 多平台应用 UI (.NET MAUI)是一个使用 C# 和 XAML 创建原生移动和桌面应用程序的跨平台框架。它将 Android、iOS、macOS,以及 Windows APIs 统一到了一个 API 中。

ASP.NET Core

ASP.NET Core 7.0 包括限流中间件、对最小 API 的改进,以及 gRPC JSON 转码。关于本次更新的更多信息请查阅 What’s new in ASP.NET Core 7

EF Core

Entity Framework Core 7.0 包括对 JSON 列的数据库无关的支持,保存更改的性能改进,以及自定义逆向工程模版。关于本次更新的更多信息请查阅 What’s new in EF Core 7.0

Windows Forms

Windows Forms for .NET 7 做了大量工作。在以下方面进行了改进:

  • Accessibility
  • 高 DPI 和 缩放
  • 数据绑定

.NET Upgrade Assistant 以及 CoreWCF

.NET Upgrade Assistant 现在支持将服务器端 WCF 应用升级到 CoreWCF,一个由社区创建的 WCF 到 .NET(Core)迁移。更多信息请查阅升级 WCF 服务器端项目以使用 CoreWCF

ML.NET

ML.NET 现在包含一个文本分类 API,可以使用最新的 state-of-the-art 深度学习技术轻松训练自定义文本分类模型。更多信息请查阅博客文章 What’s new with AutoML and toolingIntroducing the ML.NET Text Classification API

另请参阅

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值