.NET中文官方博客
免费、 跨平台、 开源。一个用于构建所有应用程序的开发人员平台
Latest posts
为 .NET 的 AI 评估解锁新的可能性
本文翻译自Wendy Breiding的Unlock new possibilities for AI Evaluations for .NET Microsoft.Extensions.AI.Evaluations 库旨在简化AI评估流程与应用程序的集成。它提供了一个强大的框架,用于评估您的 AI 应用程序并自动评估其性能。 去年11月,我们发布了该库的公开预览版。今天,我们很高兴地宣布,它现已在 dotnet/Extensions 存储库中开源。该代码仓库中包含了一套提供开发生产就绪应用所需的常用功能的库。通过向所有人开放该资源,我们希望帮助开发者更高效地在项目中利用 AI 的强大能力。 新的示例代码 为了帮助您快速上手 Microsoft.Extensions.AI.Evaluations 库,我们发布了一系列新示例代码。这些示例展示了多种应用场景,并演示如何高效利用该库的功能。无论您是经验丰富的开发者,还是刚刚踏上 AI 之旅的新手,这些示例都能为您提供宝贵的见解和实践指导。您可以在我们的 GitHub 代码仓库中查看这些示例。我们鼓励您深入探索、动手实践,并与我们分享您的反馈。您的贡献和意见对我们持续优化和扩展库的功能至关重要。 Azure DevOps 插件简介 希望将 AI 评估集成到您的 Azure DevOps 管道中?我们很高兴地宣布在Marketplace中推出了插件。该插件...
引入对SLNX的支持,.NET CLI 中更简洁的解决方案文件格式
本文翻译自Chet Husk的Introducing support for SLNX, a new, simpler solution file format in the .NET CLI 多年来,解决方案文件已成为 .NET 和 Visual Studio 体验中的一部分,并且它们一直拥有相同的自定义格式。最近,Visual Studio 解决方案团队已开始预览一种新的基于 XML 格式的解决方案文件格式,称为 SLNX。从 .NET SDK 9.0.200 开始, CLI 支持生成这些文件并与之交互,其方式与使用现有解决方案文件的方式相同。在本文的其余部分,我们将展示如何迁移到新格式,探索 dotnet CLI 对该格式的新支持,并讨论该格式走向正式发布的后续计划。 快速开始 在 SDK 9.0.200 之前,创建 SLNX 文件的唯一方式是通过 Visual Studio 设置。勾选 设置后,用户可以将现有的 .sln 文件另存为新的 .slnx 格式。 SDK 9.0.200 提供了一个命令来执行相同的迁移操作:。 让我们从一个非常简单的解决方案和项目设置开始,看看迁移的具体步骤。首先,我们创建一个新的解决方案: 现在,我们将创建一个项目并将其添加到解决方案中: 现在,让我们将解决方案转换为新格式: 新格式基于 XML 格式,比旧格式简洁得多——但包含所有相同...
.NET AI 模板现已提供预览版
本文翻译自Jordan Matthiesen的.NET AI Template Now Available in Preview 想要开始 AI 开发,却不确定从哪里入手?我给您带来了一个好消息——我们全新的 AI 聊天 Web 应用模板现已提供预览版!这个模板是我们不断努力的一部分,旨在通过在Visual Studio,Visual Studio Code 和 .NET CLI 中提供脚手架和指导,让使用 .NET 进行 AI 开发变得更容易上手。 请注意,该模板目前为预览版,未来版本可能会根据您的反馈和 AI 的快速发展进行调整。 立即安装模板 如果想要开始使用该模板的首个预览版,您需要在终端中安装 Microsoft.Extensions.AI.Templates。只需运行: 安装完成后,该模板即可在 Visual Studio,Visual Studio Code(需安装 C# Dev Kit)中使用,或者您也可以在工作目录中运行命令 来创建它。 入门指南:.NET AI 聊天模板 .NET AI 聊天模板旨在帮助您快速构建一个基于 AI 的聊天应用来使用自定义数据进行对话。此次首个版本注重基于 Blazor 的 Web 应用,并使用 Microsoft.Extensions.AI 和 Microsoft.Extensions.VectorData 抽象库构建。该模板采用了常见...
.NET MAUI在 .NET 9 中的性能功能
本文翻译自 Jonathan 和 Simon 的 .NET MAUI Performance Features in .NET 9 .NET 多平台应用 UI (.NET MAUI) 随着各个版本的发布而不断发展,与此同时,.NET 9 重点引入了裁剪功能和一个新的受支持运行时:NativeAOT。这些功能可以帮助您减少应用程序大小、提高启动速度,并确保应用程序在各个平台上流畅运行。无论是希望优化 .NET MAUI 应用的开发者,还是 NuGet 包的作者,都可以在 .NET 9 中使用这些功能。 我们还将向开发人员介绍可用于测量 .NET MAUI 应用程序性能的选项。CPU 采样和内存快照可分别通过 和 获得。这些工具可以帮助您深入了解应用程序、NuGet 包的性能问题,甚至是我们需要关注的 .NET MAUI 问题。 背景 默认情况下, iOS 和 Android 上的 .NET MAUI 应用程序使用以下设置: 完全裁剪 这就是完全裁剪()能影响应用程序大小的地方。如果您的应用包含大量 C# 代码或 NuGet 包,您可能正在错失大幅减少应用程序体积的机会。 要选择完全裁剪,您可以将以下内容添加到 文件中: 以下是完全裁剪的影响示例: 有关完全裁剪的更多信息,请参阅我们的裁剪 .NET MAUI 文档。...
使用Chroma构建.NET AI应用
本文翻译自 Luis 和 Jiri 的 Building .NET AI apps with Chroma 无论您是构建 AI 解决方案还是想使用高级搜索功能增强现有项目,您现在都可以使用 Chroma 作为 .NET 应用程序中的数据库提供程序。 什么是Chroma? Chroma 是一款适用于人工智能应用程序的开源数据库。 借助对存储嵌入、元数据过滤、向量搜索、全文搜索、文档存储和多模式检索的支持,您可以使用 Chroma 在应用程序中支持语义搜索和检索增强生成(RAG)功能。 有关更多详情,请访问 Chroma 网站。 在 C# 应用程序中使用Chroma 在本示例中,我们将使用 ChromaDB.Client 来连接到 Chroma 数据库并使用向量搜索来搜索电影。 最简单的开始方式是在本地使用 Chroma Docker 映像。您也可以在 Azure 中部署实例。 连接数据库 当使用托管版本的 Chroma 时,请将 替换为您的托管端点。 创建集合 现在您有了客户端,请创建一个集合来存储电影数据。 要对该集合执行操作,您需要创建一个集合客户端。 向集合中添加数据 创建集合后,就可以向其中添加数据了。我们存储的数据包括: 搜索电影(使用向量搜索) 现在您的数据已存储在数据库中...
增强 Razor 生产力的新功能
本文翻译自Leslie Richardson的New Features for Enhanced Razor Productivity! 如果您现在正在使用 Razor 构建 Web 应用,我们为您带来了一些令人兴奋的新功能,无论您使用的是 Visual Studio 还是 Visual Studio Code,您都会爱上这些新功能!现在,您可以使用名为“将元素提取到新组件”的重构功能,以及全新的基于 Roslyn 的 C# 分词器,这些功能旨在提升您在 Razor 文件中的开发效率。让我们一起来看看吧! 将元素提取到新组件 将元素提取到新组件是 Visual Studio 17.12 中提供的一项全新的重构功能,它可以自动化创建新 Razor/Blazor 组件的过程。您无需手动创建新文件并复制/粘贴代码,只需选中想要提取的代码(或标签),然后点击灯泡图标并选择将元素提取到新组件即可完成提取操作。该功能让创建可复用组件变得更加简单,有助于保持代码整洁,提高可维护性。 在该功能的首个版本中,提取为组件功能主要支持基础的、以 HTML 为主的代码提取场景。不过,我们计划在未来添加更多改进和支持更高级的场景(例如更一致地处理涉及变量依赖、C# 代码、参数等的提取)。 Roslyn C# 分词器 C# 分词器/词法分析器的更新显著提升了 Razor 对 C# 代码的处理能力。许...
.NET 9 网络优化
本文翻译自 Máňa, Natalia 和 Anton 创作的 .NET 9 Networking Improvements 秉承我们的传统,我们很高兴与您分享这篇博客文章,以介绍新的 .NET 版本中网络领域相关的最新动态和最有趣的变化。今年,我们带来了 HTTP 领域的改变、新的 HttpClientFactory API、.NET Framework 兼容性优化等更多内容。 HTTP 在接下来的部分中,我们将介绍 HTTP 领域最具影响力的变化。其中包括连接池的性能优化、对多个HTTP/3连接的支持、Windows代理的自动更新,以及重要的社区贡献。 连接池 在此版本中,我们对HTTP连接池进行了两项显著的性能优化。 我们增加了对多个HTTP/3连接的可选支持。根据RFC 9114标准文档,由于连接可以多路复用并行请求,因此不鼓励使用多个HTTP/3连接到对等端。然而,在某些场景下,例如服务器到服务器的通信,即使请求多路复用,单一连接也可能成为瓶颈。我们在 HTTP/2 中看到了这样的限制(dotnet/runtime#35088),它同样具有在单一连接上多路复用的概念。出于同样的原因(dotnet/runtime#51775),我们决定为HTTP/3实现多连接支持(dotnet/runtime#101535)。 该实现本身尽可能贴近 HTTP/2 多连接机制的行为。当前,它的策略是优...
立即使用 .NET 和 DeepSeek R1 构建智能应用程序!
本文翻译自Matt Soucoup的Build Intelligent Apps with .NET and DeepSeek R1 Today! 最近,DeepSeek R1 模型引起了广泛关注。我们被频繁问到的一个问题是:“我能在 .NET 应用程序中使用 DeepSeek 吗?”答案是:当然可以!接下来,我将带您了解如何通过 GitHub Models 上的 Microsoft.Extensions.AI(MEAI)库与 DeepSeek R1 结合使用,让您能够立即开始体验 R1 模型的功能。 MEAI 让使用 AI 服务变得简单 MEAI 库提供了一套统一的抽象和中间件,以简化 AI 服务在 .NET 应用程序中的集成。 换句话说,如果您使用 MEAI 开发应用程序,无论底层使用的是哪种模型,您的代码都将使用相同的 API。这降低了构建 .NET AI 应用程序的难度,因为无论使用哪个 AI 服务,您只需记住一个库(即 MEAI)的操作方式。 对于 MEAI,您将主要使用的接口是 。 与 DeepSeek R1 聊天 GitHub Models 允许您尝试大量不同的 AI 模型,而无需担心托管问题。这是免费开启 AI 开发之旅的绝佳方式。GitHub Models 还会不断更新新模型,例如 DeepSeek 的 R1。 我们要构建的演示应用是一个简单的控制台应用程序...
.NET 9 中的 OpenAPI 文档生成
本文翻译自Mike Kistler的OpenAPI document generation in .NET 9 .NET 9 中的 ASP.NET Core 通过引入全新的对OpenAPI 文档生成功能的内置支持,简化了为 API 端点创建 OpenAPI 文档的过程。这项新功能旨在简化开发工作流程,并改善 OpenAPI 定义在 ASP.NET 应用中的集成。 OpenAPI 的广泛使用催生了丰富的工具和服务生态系统,它们能够帮助您更高效地构建、测试和记录 API。例如,Swagger UI、Kiota 客户端库生成器和 Redoc 等,当然还有许多其他工具。 为什么选择 OpenAPI? OpenAPI 是定义和记录 HTTP API 的强大工具。它提供了一种标准化方式来描述 API 的端点、请求和响应格式、身份验证方案以及其他重要细节。这种标准化使开发人员能够更轻松地了解和与API进行交互,从而促进更好的协作并构建更强大的应用程序。 此外,许多大型语言模型(LLMs)已在 OpenAPI 文档上进行了训练,使其能够自动生成代码、测试用例和其他工件。通过为您的 API 生成 OpenAPI 文档,您可以利用这些 LLM 来加速开发流程。 .NET 9 中的新功能? 在 .NET 9 中,我们引入了对 OpenAPI 文档生成功能的内置支持,为 .NET 开发人员提供了更集成、更流畅的体验。此...
.NET Aspire小贴示 – 管理容器和数据生命周期
本文翻译自 James Montemagno 的 .NET Aspire Quick Tip – Managing Container & Data Lifetime .NET Aspire 凭借其强大的应用程序组合编排功能增强了本地开发流程。在 .NET Aspire 应用程序主机中,您可以在一个集中位置为应用程序指定所有项目、可执行文件、云资源和容器。当您运行应用程序主机项目时,.NET Aspire 将自动运行您的项目和可执行文件,根据需要配置云资源,并下载和运行应用程序依赖的容器。.NET Aspire 9 添加了新功能,让您可以更好地控制在本地计算机上管理容器生命周期的方式,从而在使用容器时加快开发速度。 .NET Aspire 容器 让我们看一个简单的 .NET Aspire 应用程序主机示例,该示例创建一个本地 Redis 容器资源,等待其可用后,为 Web 项目配置连接字符串: 当 App Host 启动后,对 的调用将下载相应的 Redis 镜像。 它还会创建一个新的 Redis 容器并自动运行它。 当我们停止调试 App Host 时,.NET Aspire 会自动停止所有项目,同时停止 Redis 容器并删除通常用于存储数据的关联卷。 容器生命周期 虽然上述方式适用于许多场景,但如果容器没有任何更改,您可能会希望容器始终保持运行,而不受 App ...
通过 .NET Aspire 使用本地 AI 模型
本文翻译自Aaron Powell的Using Local AI models with .NET Aspire 使用本地 AI 模型是在您自己的计算机上进行实验的一个很好的方法,它无需将资源部署到云中。在本文中,我们将了解如何使用.NET Aspire 和 Ollama 在本地运行 AI 模型,同时使用 Microsoft.Extensions.AI 抽象使其在部署时过渡到云托管模型。 在 .NET Aspire 中设置 Ollama 我们需要某种方法来从 .NET Aspire 应用程序中使用 Ollama,最简单的方法就是使用 .NET Aspire 社区工具包中的 Ollama 托管集成。您可以通过 Visual Studio 工具、VS Code 工具或 .NET CLI 从 NuGet 安装 Ollama 托管集成。让我们看一下如何通过命令行将 Ollama 托管集成安装到我们的应用程序主机项目中: 安装 Ollama 托管集成后,您可以在 文件中对其进行配置。以下是如何配置 Ollama 托管集成的示例: 这里,我们使用 扩展方法将容器添加到应用程序主机。由于我们需要下载一些模型,因此我们希望在容器重启后保留该数据量(这意味着我们不必在每次启动容器时都要重新获取好几 GB 的数据!)。此外,我们有了一个测试环境,我们将添加 容器,来为我们提供一个在应用程序之外与模型进行交互的网页界面...
探索Microsoft.Extensions.VectorData与Qdrant和Azure AI搜索的使用
本文翻译自Bruno Capuano的Exploring Microsoft.Extensions.VectorData with Qdrant and Azure AI Search 了解如何使用 Microsoft.Extensions.VectorData并通过 Qdrant 和 Azure AI 搜索实现语义搜索。 使用 Microsoft.Extensions.VectorData 深入了解语义搜索:Qdrant 和 Azure AI 搜索 语义搜索正在改变应用程序查找和解释数据的方式,它专注于含义,而不仅仅是关键字匹配。随着 Microsoft.Extensions.VectorData 的发布,.NET 开发人员拥有了一组新的构建模块,用于将基于向量的搜索功能集成到其应用程序中。在本文中,我们将探讨使用本地Qdrant和Azure AI搜索这两种实现方式来进行语义搜索。 Microsoft.Extensions.VectorData 快速介绍 Microsoft.Extensions.VectorData 是一组 .NET代码库,旨在管理 .NET 应用程序中基于向量的数据。这些库为与向量存储交互提供了一个统一的 C# 抽象层,使开发人员能够有效地处理嵌入并执行向量相似性查询。 要详细了解该库的架构和功能,推荐阅读 Luis 的精彩博客文章。 在这篇博客文章中,我们将展示两个实际用例:...
使用 Dependabot 管理 .NET SDK 更新
本文翻译自微软高级软件工程师 Jamie Magee 的Using Dependabot to Manage .NET SDK Updates 保持 .NET SDK 处于最新版本对维护安全高效的应用程序至关重要。现在,Dependabot 可以更新 global.json 中的 .NET SDK 版本,这使您可以比以往更轻松地确保自己的应用程序始终运行最新的安全补丁和改进。 定期的更新 SDK非常重要,因为它们包含: 使用 global.json 管理 SDK 版本 要管理您的 .NET SDK 版本,您通常会在项目中使用 global.json 文件。此文件会指定项目应使用哪个版本的 SDK。以下是一个简单的 global.json 文件示例: 如果您正在使用 GitHub Actions以及 dotnet/setup-dotnet ,此文件将确保在您的 CI/CD 管道中使用了正确的 SDK 版本。 配置 Dependabot 以进行 .NET SDK 更新 添加一个文件到您代码仓库默认分支的路径下。如果您希望始终接收最新更新,最简单的配置如下所示: 但是 .NET SDK 更新通常在“补丁星期二”(每月的第二个星期二)发布,因此您可能希望调整更新计划以每周仅检查一次更新。您可以通过添加部分来实现: 此外,如果您只想关注安全补丁,可以忽略主要和次要...
dotnet scaffold – .NET的下一代内容创建工具
本文翻译自微软首席产品经理Sayed Ibrahim Hashimi的dotnet scaffold - Next Generation Content Creation for .NET 。 在Visual Studio中,用于ASP.NET Core项目的Scaffolding是一个已经存在很久的功能,它在ASP.NET Core发布之后不久就已经添加。我们多年来也一直支持从命令行里进行Scaffolding。从命令行的使用体验中,我们听到了许多用户的反馈,他们希望我们为Scaffolding提供一个交互式的命令行界面 (CLI)。为此目标,我们一直在开发一个新的交互式CLI工具 。这个工具现在已经做为预览版发布。在这边文章中,我们将描述如果获取和使用这个新的命令行工具。此工具是开源的,您可以在scaffolding存储库 中查看代码。该存储库包含了 工具的代码以及其他scaffolding相关的代码。 安装dotnet scaffold 我们将使用 dotnet tool 命令来安装此工具。您可以执行以下的命令来安装最新发布的版本: 如需安装特定的版本,请访问nuget.org上的软件包。有关如果管理dotnet工具的更多信息,请参阅 .NET 工具 – .NET CLI | Microsoft Learn 上的文档。在上面的命令中,我们正在全局安装该工具,但是您也可以将工具安装到本地文件夹...
.NET 9 中System.Text.Json 的新增功能
本篇翻译于Eirik Tsarpalis的 What's new in System.Text.Json in .NET 9 - .NET Blog System.Text.Json的9.0 版本包含许多功能,主要侧重于 JSON 架构和智能应用程序支持。它还包括一些备受期待的增强功能,例如可空引用类型支持、自定义枚举成员名称、无序元数据反序列化和自定义序列化缩进。 获取最新信息 您可以通过引用 System.Text.Json NuGet 包的最新版本或 .NET 9 的最新 SDK 来尝试新功能。 JSON 架构导出器 新的 JsonSchemaExporter 类可以使用 JsonSerializerOptions 或 JsonTypeInfo 实例从 .NET 类型中提取 JSON 架构文档: 生成的模式为该类型提供了JSON序列化契约的规范。从这个例子中可以看出,它区分了可空属性和不可空属性,并根据构造函数参数是否可选来填充“required”关键字。模式的输出可以通过在 JsonSerializerOptions 或 JsonTypeInfo 实例中指定的配置进行影响: 用户可以使用 JsonSchemaExporterOptions 配置类型进一步控制生成的模式: 最后,用户可以通过指定 TransformSchemaNode 委托, 对生成的架构节点应用自己的转...
加入 .NET 智能组件生态系统
本篇翻译于首席产品经理 Daniel Roth 的Join the .NET Smart Components ecosystem - .NET Blog (microsoft.com) .NET 智能组件是一组示例嵌入式 UI 组件,使得在应用中轻松添加 AI 启用的功能变得更加简单,例如从剪贴板数据自动填写表单、智能文本补全以及语义搜索等场景。.NET 智能组件演示了如何将基于 AI 的功能预先打包成可重用的组件,从而更容易将这些功能集成到现有应用程序中。我们将 .NET 智能组件源代码作为参考示例实现提供,以帮助启动一个充满活力的可重用 .NET AI 驱动组件生态系统。 现已开源 .NET 智能组件在 GitHub 上的 dotnet/smartcomponents repo 中有了新家,其中包含实现源代码、文档和示例应用程序。库作者可以使用示例组件来获得灵感,并将其作为如何打包 AI 驱动功能以方便使用的参考实现。如果您对如何改进 .NET 智能组件有想法,或者对希望添加的新 AI 组件有想法,请通过在 GitHub 上提出问题与我们分享。 使用语义内核的局部嵌入 .NET 智能组件包含用于在您的服务器上本地计算嵌入 (LocalEmbeddings)的示例便捷 API。这些API可用于比较文本的语义相似性。这些 API 现已更新,以将基于 ONNX 的嵌入支持包装在语义内核...
推出适用于 .NET 的官方OpenAI库的稳定版本
本篇翻译于.NET 团队的Announcing the stable release of the official OpenAI library for .NET - .NET Blog (microsoft.com) 早在 6 月份,我们就推出了适用于 .NET 的OpenAI 库的第一个测试版,使开发人员能够将高级 AI 模型集成到他们的应用程序中。今天,我们很高兴地宣布,适用于.NET 的官方 OpenAI 库的稳定版本现已上线。此版本可确保开发人员在其 .NET 应用程序中使用 OpenAI 和 Azure OpenAI 服务时获得顺畅可靠的集成体验。 主要特点 适用于.NET 的官方 OpenAI 库提供了强大的工具,可简化将 OpenAI 的高级模型集成到 .NET 应用程序中的过程,从而为开发人员提供简洁流畅的体验: 此官方 .NET 库可确保与 OpenAI 和 Azure OpenAI 的顺利集成并获得支持。它还补充了 OpenAI 面向 Python 和 TypeScript/JavaScript 开发人员的官方库。 该库是开源的,在 GitHub 上开发和支持。它将与 OpenAI 的最新功能保持同步。 示例代码 以下是在 .NET...
使用 MSTest.Analyzers 增强您的测试体验
本篇翻译于Jakub Jareš的Supercharge your testing experience with MSTest.Analyzers - .NET Blog (microsoft.com) MSTest 附带一组分析器,用于检查您的测试代码并指出常见的错误和陷阱。这些错误可能很微妙,并导致测试框架完全忽略您的测试。 我们从 3.2.0 版本就开始提供这些分析器了,但在最新的 3.5.1 版本中,我们添加了一些我们认为您不应错过的分析器。 遗漏的测试 一个常见问题是当您忘记在类上添加 [TestClass] 时。MSTest 将无法知道类中有测试,也不会运行它们: 如果没有 MSTest.Analyzers,此代码在构建时不会出现警告或信息提示。运行测试时也不会出现测试失败的情况。由于类上没有 [TestClass] 属性,MSTest 会出于性能原因跳过整个类,并且您的测试将永远不会被找到。 但是使用分析器时您会在构建过程中收到一条信息提示: 我们建议将此信息提示升级为警告,甚至是构建错误。可以通过在 .editorconfig 文件中添加以下这行代码来实现 为什么默认情况下这不是警告? 您可能会问为什么 MSTEST0030 默认是一条信息提示而不是默认的警告。原因是我们不能在 MSTest v3 中引入重大变更,而上述代码是一个常见的...