.NET 7 是 .NET 6 的后继版本,侧重于统一、新式、简单和快速的特点。 .NET 7 将作为标准期限支持 (STS) 版本(以前称为 Current 版本)支持 18 个月。
本文列出了 .NET 7 的新功能,并提供了每个功能的详细信息的链接。
若要查找已针对 .NET 7 更新的所有 .NET 文章,请参阅 .NET 文档:.NET 7 版本的新增功能。
.net7.0性能
性能是 .NET 7 的一个重点,它的所有功能在设计时都考虑到了性能。 此外,.NET 7 还包括以下纯粹以性能为目标的增强功能:
<TieredPGO>true</TieredPGO>
添加到项目文件)更轻松地启用。 PGO 还可以检测和优化更过内容,例如委托。若要详细了解使 .NET 7 如此快速的许多关注性能的功能,请参阅 .NET 7 中的性能改进博客文章。
System.Text.Json 序列化
.NET 7 在以下方面对 System.Text.Json 序列化进行了改进:
有关这些更新和其他更新的信息,请参阅 .NET 7 中 System.Text.Json 的新增功能博客文章。
泛型数学
.NET 7 和 C# 11 的创新使你可以常规地执行数学运算,也就是说,无需知道正在使用的确切类型。 例如,如果想编写一个将两个数字相加的方法,在以前,必须为每种类型添加方法的重载。 现在,可以编写一个单一的泛型方法,其中将类型参数约束为类似于数字的类型。 有关详细信息,请参阅泛型数学一文和泛型数学博客文章。
正则表达式
在 .NET 7 中,对 .NET 的正则表达式库的功能和性能进行了重大改进:
使用新选项 RegexOptions.NonBacktracking,可以通过避免回溯并保证处理时间与输入长度呈线性关系的方法进行匹配。 非回溯引擎不能用于从右到左的搜索,而且还有其他一些限制,但对所有正则表达式和输入来说,速度很快。 有关详细信息,请参阅非回溯模式。
正则表达式源生成器是全新的。 源生成器生成一个引擎,该引擎在编译时针对模式进行优化,从而提供吞吐量性能优势。 发出的源是项目的一部分,可以查看和调试它。 此外,还有一个新的源生成器诊断 SYSLIB1045
通知你使用 Regex 的位置,该位置可以转换为源生成器。 有关详细信息,请参阅 .NET 正则表达式源生成器。
对于不区分大小写的搜索,.NET 7 具有较大的性能提升。 这是因为指定 RegexOptions.IgnoreCase 不再对模式中的每个字符和输入中的每个字符调用 ToLower。 相反,所有与大小写相关的工作都在构造 Regex 时完成。
Regex 现在支持一些 API 的跨度。 作为此项支持的一部分,增加了以下新方法:
有关这些改进和其他改进的详细信息,请参阅 .NET 7 中的正则表达式改进博客文章。
.NET 库
对 .NET 库 API 做出了许多改进。 部分改进在本文的其他专门章节中有所提及。 其他一些改进在下表中进行了总结。
说明 | API | 更多信息 |
---|---|---|
在 TimeSpan、TimeOnly、DateTime 和 DateTimeOffset 类型中支持微秒和纳秒 | - DateTime.Microsecond - DateTime.Nanosecond - DateTime.AddMicroseconds(Double) - 新的 DateTime 构造函数重载 - DateTimeOffset.Microsecond - DateTimeOffset.Nanosecond - DateTimeOffset.AddMicroseconds(Double) - 新的 DateTimeOffset 构造函数重载 - TimeOnly.Microsecond - TimeOnly.Nanosecond - TimeSpan.Microseconds - TimeSpan.Nanoseconds - TimeSpan.FromMicroseconds(Double) - 还有一些其他 API。 |
使用这些 API,不再需要对“计时周期”值执行计算就能确定微秒和纳秒值。 有关详细信息,请参阅 .NET 7 预览版 4 博客文章。 |
用于读取、写入、存档和提取 tar 存档的 API | System.Formats.Tar | 有关详细信息,请参阅 .NET 7 预览版 4 和 .NET 7 预览版 6 博客文章。 |
速率限制 API 通过将流量保持在安全的级别来保护资源 | RateLimiter 和 System.Threading.RateLimiting NuGet 包中的其他 API | 有关详细信息,请参阅在 .NET 中限制 HTTP 处理程序的速率和宣布发布 .NET 的速率限制。 |
用于从 Stream 读取所有数据的 API | - Stream.ReadExactly - Stream.ReadAtLeast |
Stream.Read 返回的数据可能少于流中可用的数据。 新的 ReadExactly 方法准确地读取请求的字节数,新的 ReadAtLeast 方法至少读取请求的字节数。 有关详细信息,请参阅 .NET 7 预览版 5 博客文章。 |
用于 DateOnly 、TimeOnly 、Int128 、UInt128 和 Half 的新类型转换器 |
在 System.ComponentModel 命名空间中: - DateOnlyConverter - TimeOnlyConverter - Int128Converter - UInt128Converter - HalfConverter |
类型转换器通常用于与字符串之间来回转换值类型。 这些新 API 为最近添加的类型添加了类型转换器。 |
对 IMemoryCache 的指标支持 | - MemoryCacheStatistics - MemoryCache.GetCurrentStatistics() |
GetCurrentStatistics() 允许使用事件计数器或指标 API 跟踪一个或多个内存缓存的统计信息。 有关详细信息,请参阅 .NET 7 预览版 4 博客文章。 |
用于获取和设置 Unix 文件权限的 API | - System.IO.UnixFileMode 枚举 - File.GetUnixFileMode - File.SetUnixFileMode - FileSystemInfo.UnixFileMode - Directory.CreateDirectory(String, UnixFileMode) - FileStreamOptions.UnixCreateMode |
有关详细信息,请参阅 .NET 7 预览版 7 博客文章。 |
指示字符串中应使用哪种语法的属性 | StringSyntaxAttribute | 例如,可以通过将 string 参数归为 [StringSyntax(StringSyntaxAttribute.Regex)] 来指定该参数需要正则表达式。 |
在浏览器或其他 WebAssembly 体系结构中运行时用于与 JavaScript 互操作的 API | System.Runtime.InteropServices.JavaScript | JavaScript 应用可以使用 .NET 7 中扩展的 WebAssembly 支持来重复使用 JavaScript 中的 .NET 库。 有关详细信息,请参阅在 .NET 7 中从任意 JavaScript 应用使用 .NET。 |
可观察性
.NET 7 改进了可观测性。 可观测性可帮助你了解在应用缩放时以及技术复杂性增加时应用的状态。 .NET 的可观测性实现主要是围绕 OpenTelemetry 构建的。 改进包括:
有关详细信息,请参阅 .NET 7 预览版 4 博客文章。
.NET SDK
.NET 7 SDK 提升了 CLI 模板体验。 它还支持发布到容器,以及使用 NuGet 集中管理包。
模板
对 dotnet new
命令和模板创作进行了一些可喜的改进。
dotnet new
dotnet new
CLI 命令基于模板创建新项目、配置文件或解决方案,现在支持通过 Tab 自动补全来浏览:
此外,为了更好地保持一致,install
、uninstall
、search
、list
和 update
子命令不再有 --
前缀。
创作
模板约束是 .NET 7 的一个新概念,可用于定义允许在哪个上下文中使用模板。 约束可帮助模板引擎确定哪些模板应该在 dotnet new list
等命令中显示。 可以将模板限制为操作系统、模板引擎主机(例如 Visual Studio 中的 .NET CLI 或“新建项目”对话框),以及已安装的工作负载。 需要在模板的配置文件中定义约束。
此外,在模板配置文件中,现在可以将模板参数批注为允许多个值。 例如,web
模板允许多种形式的身份验证。
有关详细信息,请参阅 .NET 7 预览版 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/Invoke) 引入了一个源生成器。 源生成器在 static
和 partial
方法上查找 LibraryImportAttribute,以触发封送代码的编译时源生成。 在编译时生成封送代码,就不再需要在运行时生成 IL 存根,就像使用 DllImportAttribute 时一样。 源生成器可提高应用程序性能,还让应用可以提前 (AOT) 编译。 有关详细信息,请参阅平台调用的源生成和在源生成的 P/Invoke 中使用自定义封送程序。
优化 System.LINQ
System.Linq 现在包含 Order 和 OrderDescending 方法,它们可以根据 T 对 IEnumerable 进行排序。IQueryable 现在也同样提供对此的支持。
支持 Unix 文件模式
此前 .NET 没有内置支持获取和设置 Unix 文件权限,这些权限用于控制哪些用户可以读取、写入和执行文件以及目录。而且 P/Invoking 手动调用 syscalls 并不容易,因为有些 syscalls 在不同的发行版上有不同的公开方式。例如,在 Ubuntu 上,你可能要对__xstat 进行 Pinvoke,在 Red Hat 上对 stat 进行 Pinvoke,诸如此类。
优化底层struct:支持ref 字段
.NET 7 运行时环境现在完全支持 ByRefLike 类型中的 ref 字段(即 ref struct)。此功能背后包含大量的语言设计,例如改进底层结构。借助此功能,以前需要在运行时环境中进行专门处理的类型(例如 Span<T> 和 ReadOnlySpan<T>),现在可以在 C# 中完全实现。
软件信息
相关推荐
更多版本
.NET4.8官方中文版 104M 系统补丁v4.8.2
查看