微软宣布发布 .NET 10 (LTS)

B站影视 内地电影 2025-11-14 13:52 1

摘要:NET 10 的人工智能新特性之一是Microsoft Agent Framework,旨在让智能 AI 代理的开发像构建 Web API 一样简单。微软表示,Agent Framework 包含一系列 .NET 库,旨在降低 AI 代理开发的复杂性。它支持多

导读:终于.NET 10 正式版本发布啦!本文将探讨 JIT 改进、标准库扩展、新的 SDK 功能以及其他创新之处。

来自雷蒙德市的软件巨头微软正式发布了 .NET 10,这是其软件开发平台的一次重大更新。

.NET 10 包含一系列改进,包括人工智能增强功能、新的加密 API、运行时改进以及带有字段支持属性的 C# 14 语言。

微软声称 .NET 10 是迄今为止性能最强的 .NET 版本,在运行时、工作负载和语言方面均有所改进。

.NET 10 的人工智能新特性之一是Microsoft Agent Framework,旨在让智能 AI 代理的开发像构建 Web API 一样简单。微软表示,Agent Framework 包含一系列 .NET 库,旨在降低 AI 代理开发的复杂性。它支持多种工作流模式,包括顺序、并发、交接和群聊编排。代理可以通过函数定义或集成(例如模型上下文协议(MCP) 服务器)来使用各种工具。代理可以使用熟悉的 .NET 托管模式进行部署,并内置依赖注入、中间件支持和生产就绪的可观测性。

微软表示,.NET 10 为 MCP 提供一流的支持,使用户能够轻松地使用外部工具和服务扩展代理。

在密码学方面,.NET 10 引入了大量全新的 API,涵盖密码学、全球化、数值计算、序列化、集合和诊断等领域。此外,随着量子计算的临近,.NET 10 扩展了对后量子密码学的支持,包括 Windows 加密 API(System.Security.Cryptography库):下一代 (CNG) 支持、增强的 ML-DSA(提供简化的 API)和 HashML-DSA 支持,以及用于混合方法的复合 ML-DSA。其他密码学增强功能包括支持填充的 AES KeyWrap,以实现安全的密钥包装场景。

微软还表示,.NET 10 运行时在 JIT 内联、方法去虚拟化和堆栈分配方面实现了“显著改进”。这包括对尖端 Intel 芯片的高级矢量扩展 10.2 支持、用于生成更小、更快的预编译应用程序的 NativeAOT 增强功能、改进的结构体参数代码生成以及用于更好优化的增强循环反转。

微软的 C# 和 F# 语言在 .NET 10 中的新特性备受开发者的关注。

C# 14 引入了字段支持的属性,从而为从自动实现的属性到自定义访问器提供了更流畅的路径。

在 C# 14 之前,开发者必须检查变量才能null安全地为其属性赋值:

if (user is not null) { user.LastActive = DateTime.UtcNow;}

现在,等效代码可以如下所示:

user?.LastActive = DateTime.UtcNow;

这项创新减少了样板代码,这是一个值得欢迎的改变。

此外,nameof对于未绑定泛型类型,开发者nameof(List)无需指定类型参数即可使用。lambda 表达式中的参数修饰符允许使用 `__init__` ref、in`__init__` 或 ` __init__`,而out无需显式指定参数类型。部分实例构造函数和事件是对 C# 13 中部分方法和属性的补充。扩展块增加了对静态扩展方法以及静态和实例扩展属性的支持,而使用 `__null` 运算符的空条件赋值则?.=提供了更简洁的空安全代码。

F# 10 带来了一系列语言、库和工具方面的增强功能,旨在提升程序的安全性、弹性和性能。可空引用类型为与 C# 库的交互提供了类型安全保障,而优化的整型范围则加快了循环和其他推导式的执行速度。

优化的相等性检查避免了装箱操作,并提高了许多常用操作的性能。可区分联合类型现在会自动生成 `.Is*` 属性,以便快速进行用例测试。

微软表示,标准库现在包含了集合的随机函数,这对于数据科学和游戏开发非常有用。改进的诊断功能、解析恢复功能以及各种工具的改进,都显著提升了开发人员的效率。

运行时(Runtime)增强

1)支持 AVX10.2

新框架版本增加了对基于 x64 架构处理器的 AVX10.2 指令集的支持。请注意,支持 AVX10.2 的处理器要到明年才会发布,因此我们只有在硬件到货后才能对这项新功能进行全面测试。

2)小数组的栈分配

.NET 10 为值类型和引用类型的小数组引入了栈分配机制。在这种情况下,如果 JIT 编译器确定数据不会超出其创建上下文的生命周期,则会将数组分配到栈上。此更改旨在减少垃圾回收器需要跟踪的对象数量。因此,它降低了垃圾回收器的负载,并为未来的优化提供了机会。

请看这个代码例子:

static void Sum{ int numbers = {1, 2, 3}; int sum = 0; for (int i = 0; i

包含三个整数的数组numbers将被分配到栈上,因为编译器知道该数据的生命周期会在 ` Sumexit` 方法执行时结束。引用类型的数组也同样如此。

static void Print{ string words = {"Hello", "World!"}; foreach (var str in words) { Console.WriteLine(str); }}

与前面的代码例子一样,words数组的生命周期限于该Print方法,因此编译器会将此数组放在栈上。

3)垃圾回收器

.NET 垃圾回收器采用分代模型,堆内存的管理取决于对象在内存中停留的时间。这使得特定年代的对象能够被快速回收。如果新生代中的引用进入了旧世代,就会出现问题——在扫描新对象时,旧的对象不会被扫描。

为了防止这种情况发生,采用了写屏障机制,该机制可以跟踪跨代引用。就编译器性能而言,并未使用写屏障。

.NET 10 还包含一些修复程序,可以消除某些 GC 写入屏障,从而提高性能。

4)JIT 改进

.NET 10 对 JIT 编译进行了重大改进,旨在进一步提升性能。这些改进包括:优化内联、改进结构体成员的代码生成、取消数组枚举抽象等等。

SDK增强

1)移除软件包引用

从 .NET 10 开始,NuGet 的审核功能可以移除对未使用包的引用。这项创新还着重于优化,它减少了构建过程中需要还原和分析的包的数量。

对于所有面向 .NET 10 及更高版本的项目框架,此功能将默认启用。

2)MSBuild

在 Visual Studio 中运行的 MSBuild是一个 .NET Framework 应用程序,而在 dotnet CLI 中运行的 MSBuild 则是一个 .NET 应用程序。这意味着,由于环境差异,msbuild.exe任何为 .NET 编写的 MSBuild 任务都无法在 Visual Studio 中构建时使用。

从 .NET 10 开始,Visual Studio 2026msbuild.exe将能够运行为 .NET 构建的 MSBuild 任务。现在,无论是在 Visual Studio 中构建还是通过 dotnet CLI 构建,我们都可以使用相同的任务的msbuild.exe。这一变化消除了为不同框架重复编写和维护 MSBuild 任务的需要。

3)新的CLI命令

新的dotnet tool exec命令允许我们在不全局或本地安装 .NET 工具的情况下执行该工具——这对于 CI/CD 非常有用。

此外,还新增了一个dnx脚本,提供了一种简化的工具执行方式。它会将所有参数重定向到dotnet命令行界面进行处理。

随着 .NET 10 的发布,我们还可以使用--cli-schema参数来检查命令行界面。使用该参数时,它会输出所调用命令或子命令的 CLI 命令的 JSON 树状表示形式。

4)运行单个 C# 文件,无需项目依赖

现在,我们可以基于单个文件创建应用程序,而无需项目,从而简化程序的创建和执行。为此,只需dotnet run对单个*.cs文件使用命令即可。开发者认为,这种方法非常适合创建小型命令行实用程序、原型和各种实验。

所有基于文件的应用程序默认都以本地 AOT 编译为目标,并支持使用dotnet publish.

.NET 10 的其他新特性和改进包括:

.NET MAUI 10新增了一个项目模板,该模板与Aspire服务默认设置集成。此模板提供扩展方法,可将遥测和服务发现功能连接到应用程序,支持配置 OpenTelemetry 指标和跟踪,并配置 HttpClient 以与服务发现功能协同工作。.NET MAUI 10 还对核心控件进行了改进,例如 BlazorWebView 和 HybridWebView 的 Web 请求拦截,用于修改标头、重定向请求或提供本地响应。.NET 10 对 Windows Forms 进行了与剪贴板相关的更新,包括改进的剪贴板访问和更好的剪贴板数据格式处理。ASP.NET Core 10 引入了多项新特性和增强功能,包括 Blazor 改进、OpenAPI 增强以及最小的 API 更新,从而提高了构建 Web 应用程序的效率。

.NET软件可从https://dotnet.microsoft.net下载。

结语

总而言之,.NET 10 是一个令人欣喜的强大版本,配得上周年纪念版和长期支持版(LTS)的双重身份。令人欣慰的是,开发人员始终专注于性能提升,并年复一年地保持标准库的更新。

来源:不秃头程序员

相关推荐