.NET7.0 64位&32位官方版
- 软件介绍
.net7.0新特性如下:
.NET 7 是.NET 6的后继版本,侧重于统一、新式、简单和快速的特点。 .NET 7 将作为标准期限支持 (STS) 版本(以前称为 Current 版本)支持 18 个月。
本文列出了 .NET 7 的新功能,并提供了每个功能的详细信息的链接。
若要查找已针对 .NET 7 更新的所有 .NET 文章,请参阅.NET 文档:.NET 7 版本的新增功能。
.net7.0性能
性能是 .NET 7 的一个重点,它的所有功能在设计时都考虑到了性能。 此外,.NET 7 还包括以下纯粹以性能为目标的增强功能:
栈上替换 (OSR) 是对分层编译的补充。 它允许运行时更改当前正在运行的方法在其执行期间(也就是说,当它“在堆栈上”时)执行的代码。 长时间运行的方法可以在执行过程中切换到更优化的版本。按配置优化 (PGO) 现在适用于 OSR,可以(通过将<TieredPGO>true</TieredPGO>
添加到项目文件)更轻松地启用。 PGO 还可以检测和优化更过内容,例如委托。改进了 Arm64 的代码生成。本机 AOT以目标平台的文件格式生成独立的可执行文件,没有外部依赖项。 它完全是本机的,没有IL 或 JIT,并提供快速的启动时间和一个小型的独立部署。 在 .NET 7 中,本机 AOT 侧重于控制台应用,并要求对应用进行剪裁。对 Mono 运行时的性能改进,这为 Blazor WebAssembly、Android 和 iOS 应用提供了支持。若要详细了解使 .NET 7 如此快速的许多关注性能的功能,请参阅.NET 7 中的性能改进博客文章。
System.Text.Json 序列化
.NET 7 在以下方面对 System.Text.Json 序列化进行了改进:
协定自定义,可以更好地控制如何序列化和反序列化类型。 有关详细信息,请参阅自定义 JSON 协定。用于用户定义类型层次结构的多态序列化。 有关详细信息,请参阅序列化派生类的属性。支持必需的成员,这些成员是必须存在于 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 的跨度。 作为此项支持的一部分,增加了以下新方法:
Regex.EnumerateMatchesRegex.CountRegex.IsMatch(ReadOnlySpan<Char>)(和一些其他重载)有关这些改进和其他改进的详细信息,请参阅.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.RateLimitingNuGet 包中的其他 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构建的。 改进包括:
新的Activity.CurrentChanged事件,可用于检测托管线程的跨度上下文何时发生更改。用于Activity属性的新的高性能枚举器方法:EnumerateTagObjects()、EnumerateLinks()和EnumerateEvents()。有关详细信息,请参阅.NET 7 预览版 4博客文章。
.NET SDK
.NET 7SDK提升了 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 中使用自定义封送程序。
.net 7.0功能
优化 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# 中完全实现。
- 下载地址
人气下载推荐
本类最新
- 本类周排行
- 本类总排行
- 本类推荐
- 热门标签