作者:.NET 团队
排版:Alan Wang
今天,我们非常激动地宣布 .NET 9的发布,这是迄今为止最高效、最现代、最安全、最智能、性能最高的 .NET 版本。这是来自世界各地数千名开发人员又一年努力的成果。这个新版本包括数千项性能、安全和功能方面的改进。您会发现在整个 .NET 堆栈(编程语言、开发者工具和工作负载)都有了全面的增强,这使您能够使用统一平台进行构建并轻松地将 AI 融入您的应用程序。
您现在可以下载 .NET 9 以及 Visual Studio 2022 和 Visual Studio Code 的 C# Dev Kit 更新。
.NET 团队、我们的合作伙伴和 .NET 社区在 .NET Conf 2024 上展示了 .NET 9 中的新功能,并深入介绍了这些功能。视频可以点播,因此您可以了解包括主题演讲在内的所有精彩内容。
https://youtu.be/ikSNL-lxolc?list=PLdo4fOcmZ0oXeSG8BgCVru3zQtw_K4ANY
让我们来看看 .NET 在开发语言、工作负载和工具方面的亮点。
无与伦比的性能 -- 更快的应用程序、更低的内存
.NET 9 是迄今为止性能最高的 .NET 版本,在运行时、工作负载和语言方面进行了 1,000 多项与性能相关的更改,并采用了更高效的算法来生成更好的代码。Stephen Toub 的对 .NET 9 性能改进的深入研究是必读之作,让我们讨论一下此版本中的一些亮点。
服务器 GC 已进行重大更改,它将根据应用内存而不是环境(机器/VM/容器)中可用的资源(内存和 CPU)来进行自适应调整。这种方法的改变在高核心数环境中影响深远,特别是在应用内存较小或随时间变化较大的情况下。到目前为止,工作站和服务器 GC 实现产生了不同的结果,需要用户在它们之间做出权衡。对于使用工作站 GC 来控制云应用程序内存使用量的任何人来说,这种变化应该特别有吸引力。内存优势伴随着适度的吞吐量成本,但可能并不明显。服务器 GC 可以配置为使用传统的实现方式,便于测试。
TechEmpower 基准测试中,.NET 9 表现卓越,吞吐量更高,内存使用大幅降低,这得益于服务器 GC 的改变。
运行时已恢复矢量化并增加了对新芯片的支持,包括 Arm64 SVE、Intel AVX10 和硬件加速运行时。RyuJIT 提高了 Arm64、循环、PGO 和边界检查的性能。由于采用了与 Native AOT 相同的异常模型,异常处理速度提高了 50%。
动态配置文件引导优化(PGO)更新后可优化更多代码模式。JIT 现在可为应用程序中常见和不可见的类型转换生成快速路径代码。例如,(IFoo)myFoo 和 myFoo is IFoo 等转换在 C# 中非常常见。它还可以针对其观察到的常见缓冲区长度展开和矢量化缓冲区上的某些操作。此更改可使执行速度提高 70%,但需要禁用 ReadyToRun。
LINQ 针对各种常见情况进行了优化。例如,当底层数组、集合或可枚举对象为空时,Take 和 DefaultIfEmpty 等方法的返回速度将提高 10 倍。Enumerable.SequenceEqual 已将操作委托给 MemoryExtensions.SequenceEquals,允许将数组作为跨度传递以实现高效的迭代和矢量化,并为数组输入提供特殊处理。此功能现在可用于 List。
System.Text.Json 的底层细节得到了显著优化,各种操作的性能提升超过50%。JsonProperty.WriteTo 现在可以直接写入 UTF8 字节,以避免字符串分配。新的 JsonMarshal.GetRawUtf8Value API 返回 UTF8 字节,作为 JsonElement.GetRawText 的替代方案,后者返回字符串并需要编码和分配。如果可以从给定的枚举中检索计数,JsonObject 现在可以正确调整其底层支持存储的大小,从而避免分配和重新调整大小的成本。
除了 .NET 的这些基础改进之外,您还会发现所有应用程序类型的性能都有所增强,请继续阅读以了解更多信息。
.NET Aspire -- 构建更好的应用程序的基础构建块
.NET Aspire 是一套功能强大的工具、模板和包,用于无缝开发可观察的生产就绪型应用程序。自 .NET Aspire 首次发布以来,仅过了六个月,我们已经对堆栈的所有部分进行了改进,从遥测和指标仪表板中的新功能到更简化的云应用程序部署。很高兴看到 .NET Aspire 被各种类型的应用程序采用,并看到社区在其场景中应用集成和工具。此外,我们在 Microsoft 看到了广泛的应用 - Xbox 和 Copilot 团队都已将 .NET Aspire 集成到其现有服务中,通过易于访问的见解和各种兼容的 Azure 集成来加强其内部开发循环。
今天发布的 .NET Aspire 9 带来了一些您最需要的功能,可以帮助您简化应用程序开发。现在,您可以从仪表板启动和停止资源,在调试会话之间保持容器处于活跃状态,并访问包括 WaitFor 在内的新 API 以更好地管理资源启动。我们与社区密切合作,为 OpenAI、Ollama、Milvus 等推出了新的无缝集成。我们简化了 .NET Aspire 的获取流程,以便更轻松地将其集成到您的应用程序中,并改进了 Azure 容器应用程序的部署方案,我们很高兴宣布 .NET Aspire 预览版支持 Azure Functions。
.NET Aspire 中还有更多值得探索的内容,从工具到更广泛的生态系统,例如新的 .NET Aspire 社区工具包。如果您想要开始使用 .NET Aspire,我们的免费 Microsoft Learn 课程和新的 .NET Aspire 认证(https://aka.ms/aspire-credential)是帮助您踏上 .NET Aspire 之旅的绝佳选择。当然,请让我们知道您对 .NET Aspire 的看法,无论是在我们的 GitHub、.NET Discord 还是在我们的直播中!
AI------一个不断发展和繁荣的 AI 生态系统
我们将继续扩展 .NET 功能,以构建和注入 AI 应用程序。我们提供了新的学习材料和示例、简化了生态系统集成、并与合作伙伴合作构建了一个充满活力的 AI 社区,将 AI 解决方案部署到云中比以往任何时候都更加顺畅。行业内的众多公司都采用 .NET 为他们的客户(包括 H&R Block、Blip 和 KPMG)构建顶级 AI 体验。.NET 为您最喜欢的编码助手 GitHub Copilot 提供支持,新的 Microsoft Copilot 体验是由团队使用 .NET 重建。
开发人员在构建 AI 服务和应用时,能够获得最新的进展至关重要。因此,我们与 Azure、OpenAI、LlamaIndex、Qdrant、Pinecone、Milvus、AutoGen、OllamaSharp、ONNX Runtime 等 AI 生态系统中的许多其他合作伙伴合作,为 .NET 开发人员提供一套功能强大的产品。
我们还通过与社区和我们的控件供应商合作伙伴一起构建智能组件生态系统,使您更轻松地将 AI 注入控件集成到您的 .NET 应用程序中。
.NET 中的 AI 构建块
一个强大的生态系统意味着开发人员拥有比以往更多的选择来决定哪种方案最适合他们的场景。我们研究了如何简化这些集成,并消除生态系统中不断增长的 API 和功能带来的入门障碍。因此,我们与 Semantic Kernel 合作,为 .NET 生态系统引入了 Microsoft.Extensions.AI 和 Microsoft.Extensions.VectorData 中的一组抽象,这些抽象提供了统一的 C# 抽象层,用于与 AI 服务(例如小型和大型语言模型 (SLM) 和 LLM、嵌入、向量存储和中间件)交互。这种新的简化方法已经从 Pieces 和 OllamaSharp 等早期采用者那里获得了巨大的成果。
张量和标记器
Microsoft.Extensions.AI 和 VectorData 只是我们在 .NET 9 中提供的构建块的一个子集,我们还对库和原始类型进行了重大改进,以改进 AI 开发。Microsoft.ML.Tokenizers 改进了包括 GPT(4、o1 等)、Llama、Phi 和 Bert 等流行模型系列的标记器,还增加了对字节级 BPE、SentencePiece 和 WordPiece 等分词算法的支持。
随着语言模型即服务的出现,开发者使用AI的门槛大幅降低。Tensor也通过引入了一种新类型来表示多维数据,简化了库和应用操作之间的互操作,从而促进了 AI 开发。
我们迫不及待地想看看您使用这些新的构建块集成创建的内容。若想快速开始使用它们,请浏览我们的 AI 文档和 .NET 的 AI 示例。
面向 .NET 开发人员的 GitHub Copilot 增强功能
GitHub Copilot 通过改善编辑器体验并在 .NET 开发人员的常规工作流程中提供 AI 帮助来提高工作效率。随着 Visual Studio 和 Visual Studio Code 的最新版本以及 GitHub Copilot 的更新,这种体验会变得更好。现在,您可以使用 Copilot 以及已融入 AI 的 IDE,在整个开发生命周期的各个阶段(从编写代码到编写测试,再到调试应用程序)中为您提供帮助。以下是您可以在最新版本中期待的一些功能;
-
AI 智能变量检查:使用集成 AI 变量检查优化您的调试工作流程。
-
AI 驱动的 IEnumerable 可视化工具:IEnumerable 可视化工具中 AI 驱动的 LINQ 可编辑表达式。
-
使用 GitHub Copilot 修复代码:GitHub Copilot 可帮助您解决代码问题。
-
更好的 C# AI 补全:GitHub Copilot 从相关源文件中引入更多上下文,以改进 C# 的补全。
-
使用 GitHub Copilot 调试测试:使用 GitHub Copilot 调试测试,获取调试失败测试的帮助。
copilotvs2022
使用 ASP.NET Core 和 Blazor 进行全栈 Web 开发
ASP.NET Core 是我们针对 .NET 的全栈 Web 框架,提供构建现代 Web 应用程序和可扩展后端服务所需的一切。.NET 具有许多新功能以及显著的性能、可访问性和安全性改进。使用 .NET 9 构建的 ASP.NET Core 应用程序默认是安全的,扩展了对提前编译的支持,改进了监控和跟踪,并且内置了性能改进,您将看到更高的吞吐量、更快的启动时间,并且内存使用量更少。
优化了 ASP.NET Core 中静态文件的处理
静态 Web 资源(例如 JavaScript 和 CSS 文件)几乎是每个 Web 应用程序的一部分。.NET 9 中的 ASP.NET Core 现在会在构建和发布期间优化这些文件,以实现高效部署。在构建期间,ASP.NET Core 会识别任何静态 Web 资源,并通过在文件名中添加基于内容的哈希来生成这些文件的指纹版本。指纹可确保文件名是唯一的,从而避免使用过时的文件版本并允许积极缓存文件。当发布应用程序时,还会使用 Brotli 对文件进行预压缩,从而大大减少文件下载大小并避免服务器的压缩负担过重。文件在运行时使用端点路由进行处理,这意味着您现在可以对静态文件使用其他端点感知功能,例如按端点授权。
.NET 9 中的 Blazor 改进
.NET 9 中的 Blazor 比以往更好,可让您构建精美的现代 Web 和混合应用程序。此版本为 Blazor 的各个方面带来了性能改进、新的 Blazor 混合和 Web 应用程序模板以及供开发人员创造愉悦体验的新 API。
Blazor 现在可以使用新的 RendererInfo API 在运行时检测组件渲染模式并相应地调整组件渲染。您可以在预渲染期间禁用或隐藏交互元素,然后在组件交互后启用它们。
csharp
@if (RendererInfo.IsInteractive)
{
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
}
else
{
<p>One moment, please</p>
}
使用交互式服务器渲染(Blazor Server)的 Blazor 应用受益于新的重新连接体验,该体验具有更友好的 UI、更快地重新连接到服务器,并且在用户的连接丢失时自动重新加载页面。
ASP.NET Core 中的 OpenAPI 增强功能
使用 ASP.NET Core 构建的 API 为全球范围内的服务提供了大规模支持,并且我们在每次发布时都持续改进构建它们的体验。对于API 开发人员来说,.NET9的一大亮点是使用 Microsoft.AspNetCore.OpenAPI 包对 OpenAPI 文档生成提供新的内置支持。元数据会自动从您的应用程序代码、属性和扩展方法中提取。然后可以使用对操作、架构或整个文档进行操作的转换器进一步自定义文档。在 Minimal API 应用程序中,该功能是原生 AOT 友好的,可让您能够优化应用程序以获得最佳性能。除此之外,OpenAPI 文档可以在构建时生成,并集成到利用 OpenAPI 工具的本地开发工作流和构建管道中。
提高了 ASP.NET Core 中的安全性
安全性始终是 ASP.NET Core 的核心,您会发现一些改进有助于确保您的应用默认安全。现在可以更轻松地在 Linux 上设置受信任的开发证书以在开发期间启用 HTTPS。Blazor 现在具有用于将身份验证状态传输到客户端的内置 API,并且具有向 OAuth 和 OIDC 授权请求添加其他参数的可扩展性,以及支持推送授权请求 (PAR)。最后,我们强化了 ASP.NET Core 的数据保护支持,并改进了 Kestrel 的连接指标,以便更轻松地检测连接失败的原因。
这些只是 .NET 9 的 ASP.NET Core 中的一些改进。有关这些功能及其他功能的更多详细信息,请参阅 .NET 9 的 ASP.NET Core 中的新增功能。
.NET MAUI -- 增强多平台应用程序开发
.NET MAUI 是使用 .NET 在移动设备和桌面上构建多平台应用程序的权威方法。除了统一的抽象层以从单个 API 访问原生功能并从单个代码库创建令人惊叹的跨平台用户界面之外,.NET MAUI 还包括为 Android、iOS、macOS 和 Windows 构建的基础,并提供了访问 .NET 中的原生 API的途径。.NET MAUI 进入 .NET 9 的首要目标是提高质量和可靠性,以便您更轻松地将应用部署到生产环境中。在过去的一年里,我们看到在 Google Play 商店中使用 .NET MAUI 构建的应用程序增加了一倍多,开发人员的使用率增长了 30% 以上,达到历史最高水平,社区参与度和贡献也令人惊叹。
我们最近欢迎 .NET 生态系统中领先的组件供应商 Syncfusion 为 .NET MAUI 做出贡献。自今年 7 月至 9 月 Syncfusion 开始为 .NET MAUI 做出贡献以来,他们已占到所有社区贡献的 55% 以上,与前 3 个月相比增长了 557%,这要归功于一群出色的贡献者。在 .NET 9 中,我们引入了一个全新的项目模板,将社区放在首位,该模板包含 14 个免费的开源 Syncfusion 控件和来自社区的其他流行库,这些库演示了 MVVM、数据库访问、导航、视图刷新和其他常见应用模式的最佳实践。您可以使用它来快速开始您的应用开发。
我们一直在倾听开发人员的意见,.NET 9 为桌面和移动应用程序提供了增强的性能、可靠性和更深层次的集成。您会发现 .NET MAUI 的各项性能都有所提升,包括针对 iOS 和 Mac Catalyst 的 CollectionView 和 CarouselView 的新实现、现有控件和应用程序生命周期的更新,以及原生 AOT 和修剪增强功能,使您能够构建更小、更快的应用程序。除了支持最新的 iOS、macOS 和 Android 操作系统外,我们还在 .NET 9 中添加了几个原生平台功能,包括 Android Asset Packs、与原生库的更好互操作性,以及通过新的 Xcode Sync dotnet 工具简化 Xcode 和 Visual Studio Code 之间的集成。
.NET 9 中的 .NET MAUI 有很多值得喜爱和探索的地方。请务必仔细阅读新增功能文档,并尝试使用新的项目模板。
使用 .NET 9 进行 Windows 开发
借助 .NET 9,您的 Windows 应用将能够访问最新的操作系统功能和能力,同时确保它们比以往任何时候都高效、更易于访问。无论您是使用 WinUI 3 和 Windows App SDK(https://learn.microsoft.com/windows/apps/windows-app-sdk/) 创建新的现代应用程序,还是对现有的 WPF 和 WinForms 应用程序进行现代化改造,您的 Windows 应用在 .NET 9 上都能获得最佳运行效果。我们一直与 Windows 开发人员社区密切合作,以提供您一直要求的功能。这包括对更小、性能更高的应用程序的 WinUI 3 的原生 AOT 支持、使用 Fluent UI for WPF 的现代主题增强功能,并且 WinForms 通过获取新的深色模式、现代图标 API 和使用 Control.InvokeAsync 时改进的异步 API 访问等更新得到了增强。
.NET 9 在 Windows 开发方面还有更多内容值得探索,因此请务必阅读 WinUI 3、WPF 和 WinForms 中的新增功能文档。
C# 和 F# -- 您最喜欢的编程语言变得更加出色
C# 是世界上最受欢迎和最受喜爱的编程语言之一。在 C# 13 中,我们专注于让您以熟悉和喜爱的风格更轻松、更安全、更快速地编写代码的功能。随着 C# 13 中集合表达式的加入,方法签名中 params 修饰符的使用得到了增强。这意味着您不再局限于使用带参数的数组类型,而是可以使用任何受支持的集合类型!
C# 13 通过引入使用 ref struct 值的新方法来解锁更高性能的代码,并且使得使用 System.Threading.Lock 处理多线程应用程序变得更加容易:
csharp
Lock myLock = new();
void Concat<T>(params List<T> items)
{
lock (myLock)
Console.WriteLine(string.Join("\e[1mItem: \e[0m", items));
}
F# 继续为 .NET 开发人员提供最出色的函数式编程。F# 9 提供了各种语言、库和工具增强功能,旨在让您的程序更安全、更具弹性、性能更佳。可为null的引用类型为与 C# 库的交互带来了类型安全性,优化的整数范围加快了 for 循环和其他迭代操作的速度,优化的相等性检查避免了装箱并提高了许多常见操作的性能。可区分联合可自动生成 .Is* 属性,用于快速进行案例测试。标准库现在包含用于集合的随机函数,这对于数据科学和游戏开发非常有用。改进的诊断、解析器恢复和各种工具改进提高了开发人员的工作效率。
csharp
// FS3261: Nullness warning: The types 'string' and 'string | null' do not have equivalent nullability.
let methodArgument (s: string | null) = File.Create s
let matchNullableString(s: string | null)
=
match s with // `s` is of type string | null
| null -> 0
| notNull -> notNull.Length // `notNull` is of type string
我们知道您会喜欢更多的功能,因此请务必浏览 C# 13的新增功能文档和 F# 9的新增功能文档。如果您即将开始 C# 开发之旅,请务必查看与 freeCodeCamp 合作的 Foundation C# 认证。
全球最佳开发者工具
今天发布的 .NET 9 伴随着我们开发人员工具的更新,使您的工作效率比以往更加高效。首先,Visual Studio 2022 17.12 的发布带来了一系列生产力改进,涵盖了开发人员工作流程的各个方面,包括大幅度的性能改进、增强的调试和诊断体验、与 .NET Aspire 更紧密的集成、更深的云集成、对 C# 13 的分析器支持、增强的 Git 支持等等!事实上,这个版本的 Visual Studio 2022 具有比以往更多的用户请求的功能。这个版本适合每个人,我们相信您会喜欢它。
vs20221712
Visual Studio Code 的 C# 开发工具包不断发展,改进了编辑可靠性、NuGet 包管理、增强了测试适配器和代码覆盖率结果、改进了 .NET MAUI 开发支持以及升级的项目启动/调试配置。请下载最新版本的 Visual Studio 2022 和Visual Studio Code 的 C# 开发工具包,以在今天开始受益并改善您的开发工作流程。
我们知道开发人员喜欢命令行界面(CLI),我们一直致力于提升 .NET CLI 的使用体验,并帮助将其融入安全的开发流程中。在 .NET 9 中,我们对终端记录器进行了全面改进,包括可点击链接、持续时间计时器、颜色编码等。记录器的输出更加简洁,现在您可以在构建结束时找到失败和警告总数的摘要,使其比以往更加易于使用。
.NET SDK 中还有更多您会喜欢的功能,因此请务必阅读新增功能文档。
一个繁荣的创作者和贡献者社区
我们热爱出色的 .NET 社区,如果没有您的支持和贡献,.NET 9 是不可能实现的。9,000多名社区成员做出了26000多份贡献!感谢您提出的每一个问题、评论、代码审查和拉取请求,这些都帮助 .NET 9 成为迄今为止最好的.NET版本。我们也感谢您对 .NET 的热爱,并在今年的 Stack Overflow 开发者调查中将 .NET 与 ASP.NET Core 和 C# 一起评为最受推崇的框架和编程语言。感谢您帮助建立这个令人惊叹的全球开发者社区。
感谢所有帮助 .NET 生态系统蓬勃发展的库创建者,他们让 NuGet 成为逐年增长最快的软件包生态系统。现在有超过 42万个软件包可供 .NET 开发人员使用,下载量达到惊人的 5700 亿次。我们正在大力投资改进 NuGet,以提供开发者喜爱的功能,并努力使其成为全球最安全的软件包生态系统。
NuGet 为整个生态系统的库创建者和使用者带来了重大改进。NuGet.org 有了全新的外观,现在支持深色模式,与 GitHub 合作为 Dependabot 添加原生 NuGet 支持,对 Open Source Scorecard 和 OpenSSF 固定依赖项的支持,并增强了与 deps.dev 的集成,以便更深入地了解项目中的依赖项。
此版本中的新功能为 .NET 开发人员的软件包生态系统带来了增强的安全性。dotnet restore 也已更新,以审核软件包的顶级和传递依赖关系是否存在漏洞。此功能与中央包管理配合使用,可让您能够快速将包升级部署到存储库中的所有项目。dotnet restore
会在您的终端、Visual Studio 和 CI/CD 管道中向您发出警报,这些警告由 GitHub 咨询数据库中的软件包漏洞驱动。
新的审核行为将产生新的警告,这对于启用了"将警告视为错误"的项目的开发人员来说非常重要。我们鼓励大家阅读更新的 NuGet 包审核改进文档。
从今天开始使用 .NET 9 进行构建
您现在可以下载 .NET 9 以及 Visual Studio 2022 和 Visual Studio Code 的 C# Dev Kit 更新。
通过 .NET Conf 2024 的点播会议和 .NET 9 每个部分的最新文档,深入了解此版本中的所有新功能:
此外,我们将在未来几个月内发布有关 .NET 9 的所有新功能(包括语言、工作负载和工具)的深入博客文章,因此请务必订阅 .NET 博客,以便在新博客上线时收到通知。
我们迫不及待地想看看您使用 .NET 9 构建的内容。