.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 中引入重大变更,而上述代码是一个常见的...
.NET 9 预览版 6:新功能抢先看
本篇翻译于.NET Team的.NET 9 Preview 6 is now available! 现在是了解最新 .NET 9 预览版的好时机!我们刚刚发布了第六个预览版,在之前预览版的基础上添加了一些很棒的功能,并对 .NET Runtime、SDK、库、C# 和框架(包括 ASP.NET Core、Blazor 和 .NET MAUI)进行了重大改进。请查看下面链接的完整发行说明并立即开始使用。 下载 .NET 9 Preview 6 此版本包含以下改进: 📚库: ⏱️Runtime: 🛠️SDK 您可以在下面找到有关 .N...
C# 13:探索最新的预览功能
本篇翻译于Kathleen Dollard 的C# 13: Explore the latest preview features - .NET Blog (microsoft.com) C# 13 已初具雏形,其新特性侧重于灵活性、性能以及使您最喜欢的功能在日常中变得更容易使用。我们以公开的方式构建 C#,在今年的 Microsoft Build 大会上,我们会让您一睹 C# 13 的精彩之处。今天,我们想分享一下C# 13 当前的状态,以及您今天就可以尝试的新功能,并提供有关此版本及以后计划中的功能更新。让我们更详细地了解这些新功能。 立即试用 C# 13 在我们深入研究 C# 13 的每个新功能之前,您可能想知道如何使用它。 您可以在最新的 .NET 9 预览版(撰写本文时为预览版 6)和 Visual Studio 2022-17.11 的最新预览版中找到 C# 13 的最新预览版。若要访问预览功能,请在项目文件中将您的语言版本设置为preview: params集合 C# 13扩展了 params关键字,使其适用于可以通过集合表达式构造的任何类型。无论是编写方法还是调用方法,都增加了灵活性。 当 params 关键字出现在参数之前时,对该方法的调...
C#12新功能合集四:使用默认 lambda 参数重构C#代码
本文翻译于David Pine的这篇文章:Refactor your code with default lambda parameters 。 本文是探讨 C# 12的各种功能的四篇系列文章中的最后一篇。在这篇文章中,我们将探讨“默认 lambda 参数”功能,使开发人员能够在 lambda 表达式中使用默认参数值。本系列涵盖了很多内容: 这些功能是我们不断努力提高代码可读性和可维护性的一部分。让我们详细探索它们! 默认 Lambda 参数🧮 默认 lambda 参数是 C# 12 中的一项新功能,允许开发人员在 lambda 中表达默认参数值。此功能是 C# 方法中现有默认参数功能的自然扩展。 C# 12 之前🕰️ 在 C# 12 之前,当您定义需要提供某种默认行为的 lambda 表达式时,您必须使用空合并运算符 (??) 或条件运算符 (?:)。请查看以下示例: 使用 C# 12 🤓 相反,使用默认 lambda 参数后,您可以直接在 lambda 表达式中定义 lambda 参数的默认值。默认 lambda 参数的语法类似于方法中默认参数的语法。默认值在参数名称和等号 (=) 后指定。请查看以下示例: 当涉及默认参数时,Lambda 表达式遵循与方法相同的规则。默认值必须是编译时常量,并...
Visual Studio Code 的 .NET MAUI 扩展现已正式发布
本篇翻译于Maddy Montaquila的The .NET MAUI Extension for Visual Studio Code is now Generally Available 今天,我们非常高兴地宣布 .NET MAUI VS Code 扩展插件结束了预览阶段,并将包含一些期待已久的新功能 - 包括 XAML IntelliSense 和 Hot Reload! 什么是 .NET MAUI 扩展插件? .NET MAUI 扩展插件为您提供了在轻量级 Visual Studio Code 中开发 .NET MAUI 应用所需的工具。它基于C# Dev Kit 和 C# 扩展构建,提供了解决方案资源管理器、C# Hot Reload、强大的 C# IntelliSense 等众多功能。.NET MAUI 扩展增加了针对移动设备和桌面设备的能力,此外,借助最新版本的扩展,增加了 XAML IntelliSense 和 XAML Hot Reload,同时让您的 VS Code 体验更加精简和简单。 全新的和改进的 XAML 编辑体验 .NET MAUI 扩展的预览版附带了基本的 XAML 语法高亮显示和自动补全功能,但它与我们想要交付的完整体验相距甚远。在过去的一年里,我们对 Visual Studio 中现有的 XAML 语言服务进行了现代化改造,将其打包,并带到 VS Code中以供您进行...
C#12新功能合集三:使用任意类型别名重构C#代码
本文翻译于David Pine的这篇文章: Refactor your code using alias any type。 这篇文章是四篇系列文章中的第三篇,主要探讨C# 12的各种功能。在这篇文章中,我们将深入探讨“别名任何类型”功能,该功能允许您使用 using 指令为任何类型创建别名。这个系列已经初具规模: 所有这些功能都将继续我们的旅程,使我们的代码更具可读性和可维护性,这些被认为是开发人员应该知道的“日常 C#”功能。让我们深入了解吧! 别名任意类型*️⃣ C# 12 引入了使用 using 指令为任意类型添加别名的功能。此功能允许您指定映射到其他类型的别名。这包括元组类型、指针类型、数组类型,甚至非开放泛型类型,所有这些类型都可以在您的代码中使用。此功能在以下场景特别有用: 官方 C# 文档提供了很多有关如何使用此功能的示例,但我并不想在此重复这些示例,而是决定编写一个演示应用程序来示范该功能的各个方面。 可空引用类型 此功能支持大多数类型,但可空引用类型除外。也就是说,您无法为可空引用类型设置别名, C# 编译器会报告错误 CS9132:使用的别名不能是可空引用类型。以下内容摘自功能说明,以帮助澄清这一点: 示例应用程序:UFO...
.NET Build 2024:引领AI与云原生应用开发的新篇章
本文翻译自.NET Team的.NET Announcements and Updates from Microsoft Build 2024 - .NET Blog。 在 Microsoft Build 2024 上,我们很高兴推出一系列旨在使 .NET 开发更快、更容易的新功能和工具。 探索 Microsoft Build 2024 上的 .NET 会议,了解新功能的实际效果,或者通过下载 .NET 9 Preview 4 亲自尝试。 以下是我们的更新和公告: 让我们从如何使用 .NET 为开发人员改进 AI 开发开始。 .NET 与人工智能 .NET 为您提供了使用 AI 创建功能强大的应用程序的工具。您可以使用Semantic Kernel来编排 AI 插件,从而将 AI 功能无缝集成到您的应用程序中。您可以使用最先进的库(例如 OpenAI、Qdrant 和 Milvus)来增强应用程序的功能。您还可以使用 .NET Aspire 将应用程序部署到云端,确保最佳性能和可扩展性。 让我们更深入地了解这些内容。 AI基础知识 我们引入了一种新的 Tensor<T> 类型。张量是许多数学模型的基本组成部分,包括深度学习算法。它们是用于保存神经网络中的...
加入 Microsoft Build 2024 的 .NET 团队!
本篇翻译于Mehul Harry的 Join the .NET Team at Microsoft Build 2024! 倒计时已经开始! Microsoft Build 2024 即将到来,如果您是 .NET 爱好者,请准备好迎接一系列精彩的会议。 无论您是经验丰富的开发人员还是刚刚开始您的开发之旅,每个人都能找到适合自己的东西。 活动形式:混合体验 无论您是在西雅图还是在舒适的家中,都可以加入我们。 通过现场和在线会议的相结合,您不会错过任何精彩内容。 深入了解 .NET:不容错过的会议 请查看下面的会议,了解即将到来的活动。 如需了解更多详情并预订席位,请务必访问会议链接。 请务必查看 Microsoft Build 上的所有 .NET 会议并将它们添加到您的个人资料议程中。 我们还提供了一组很棒的预先录制的 .NET 会议: 联系和学习 会见专家 请访问我们的专家聚会区,讨论 一切.NET 相关内容。 我们的专家随时准备分享他们对最新趋势的见解并回答您的具体问题。 现场演示 在我们的现场演示区体验 .NET 的强大功能。 通过实际示例和实际应用探索新的工具、特性和功能。 加入对话 与其他开发人员和更广泛的 .NET 社区互动。 分享您的经验、交流想法并建立超越活动范围的联系。 准备好深入研究了吗? 这个安排有望使 ...
C#12新功能合集二:使用集合表达式重构代码
本文翻译于David Pine的这篇文章: Refactor your code with C# collection expressions。 本文是系列文章的第二篇,该系列文章涵盖了探索C# 12功能的各种重构场景。 在这篇文章中,我们将了解如何使用集合表达式重构代码,我们将学习集合初始化器、各种表达式用法、支持的集合目标类型和spread语法。 该系列的进展情况如下: 这些功能延续了我们的旅程,使我们的代码更具可读性和可维护性,并且被认为是开发人员应该了解的“日常 C#”功能。 集合表达式🎨 C# 12 引入了集合表达式,它为许多不同的集合类型提供简单且一致的语法。 当使用集合表达式初始化集合时,编译器生成的代码在功能上与使用集合初始化项等效。 该功能强调一致性,同时允许编译器优化低级的 C#。 当然,每个团队都可以决定采用哪些新功能,如果您愿意,您可以尝试并引入这种新语法,因为之前所有初始化集合的方法都将继续工作。 对于集合表达式,元素出现在左括号 [ 和右括号 ] 之间的内联元素序列。 继续阅读以了解有关集合表达式如何工作的更多信息。 初始化🌱 C# 提供了许多语法来初始化不同的集合。 集合表达式取代了所有这些,所以让我们先来看看初始化整数数组的不同方法,如下所示: 这四个版本在功能上都是等效的,并且编译器为每个版...
C#12新功能合集一:使用主构造函数重构代码
本文翻译于David Pine的这篇文章:Refactor your C# code with primary constructors 作为 .NET 8 一部分的 C# 12 引入了一组引人注目的新功能! 在这篇文章中,我们将探讨其中一个功能,特别是主构造函数,解释其用法和相关性。 然后,我们将演示一个重构示例,以展示如何将其应用到您的代码中,并讨论其好处和潜在的缺陷。 这将帮助您了解这一更改的影响并有助于您决定是否采用该功能。 主构造函数1️⃣ 主构造函数被认为是一项“C#日常”的开发人员功能。 它们允许您在一个简洁的声明中定义类或结构及其构造函数。 这可以帮助您减少需要编写的样板代码量。 如果您一直在关注 C# 版本,您可能熟悉记录类型,其中包括主构造函数的第一个示例。 与记录类型的区别 记录类型作为类或结构的类型修饰符引入,这简化了构建简单类(如数据容器)的语法。 记录可以包括主构造函数。 该构造函数不仅生成一个支持字段,而且还为每个参数公开一个公共属性。 与传统的类或结构类型不同,在传统的类或结构类型中,主构造函数参数可以在整个类定义中访问,而记录被设计为透明的数据容器。 他们本质上支持基于值的相等,这与他们作为数据持有者的预期角色相一致。 因此,它们的主构造函数参数可以作为属性访问是合乎逻辑的。 重构示例✨ .NET 提供了许多模板,如果您曾经创建过Wo...
无障碍应用程序之旅:键盘可访问性和 .NET MAUI
本篇翻译于Rachel Kang (SHE/HER) 的 The Journey to Accessible Apps: Keyboard Accessibility and .NET MAUI 首先让我们一起来看看您的应用程序是否支持键盘访问: 这次体验如何?是否轻松?是否与您通常使用应用程序的体验相匹配? 确保您的应用程序体验在仅通过键盘导航时同样出色,这对于构建一个对所有人都包容且可访问的应用程序体验至关重要。 Web内容可访问性指南 (WCAG) 若要了解键盘可访问性的详细信息,可以从 Web 内容可访问性指南 (WCAG) 开始。 WCAG 是一组针对 Web 可访问性的技术标准,被广泛引用,并扩展到 Web 以外的各种应用程序和平台。 它已成为全球标准和法律基准,并随着技术的发展而不断发展。 在各种指南中,有一个经常被忽视的是指南第2.1条,该指南表明开发人员应“使所有功能可通过键盘访问”。 这包括四个成功标准: 成功标准 2.1.1 键盘 内容的所有功能都可以通过键盘界面操作,而无需对单个按键的时间进行特定的控制,除非底层功能需要依赖用户移动路径而不仅仅是端点的输入。 成功标准 2.1.2 无键盘陷阱 如果您可以使用键盘界面将键盘焦点移动到页面的某个组件,那么您只需使用键盘界面就可以将焦点从该组件移开...
MSTest SDK:.NET 8的测试配置与灵活性新篇
本篇翻译于Marco Rossignoli 和Amaury Levé 的Introducing MSTest SDK – Improved Configuration & Flexibility。 我们很高兴地宣布,基于 MSBuild Project SDK 系统构建的全新 MSTest SDK已推出。它旨在通过合理的默认值和灵活的选项使项目配置更加容易,从而为您提供更好的 MSTest 测试体验。 这种新体验是建立在最近推出的 MSTest 运行程序的基础上(请查看公告)https://devblogs.microsoft.com/dotnet/introducing-ms-test-runner/,以进一步提高您的体验。 这个新的运行程序是一种轻量级、可靠且高性能的运行 MSTest 测试的方式,作为 MSTest.TestAdapter NuGet 包的依赖项发布。该运行器及其扩展由多个 NuGet 包组成,以提供可扩展、灵活且可配置的测试运行体验。然而,可定制性可能会导致许多问题:推荐的扩展是什么?正确的默认值是什么?如何对齐版本? 这就是 MSTest SDK 的用武之地。 MSTest SDK 入门 开始使用新的 MSTest SDK 非常简单。 只需创建一个 MSTest 项目(或更新现有的 MSTest 项目)并将 .csproj 文件的内容替换为以下内容: ...
使用 .NET 为 Microsoft AI 构建可扩展网关
本篇翻译于Kara Saucerman的Building a scalable gateway with .NET for Microsoft AI - .NET Blog Microsoft AI 团队构建了全面的内容、服务、平台和技术,以便消费者在任何设备上、任何地方获取他们想要的信息,并为企业改善客户和员工的体验。我们的团队支持多种体验,包括 Bing、Copilot、广告、地图和 Edge,并通过 Edge 新标签页、Windows 10 和 11 等入口点呈现,这些入口点每月有超过 10 亿活跃用户。我们意识到需要一个高性能且可靠的网关作为 Microsoft AI 的前端和入口层。这将使多个团队能够利用我们开发的通用功能来帮助运营业务并专注于客户体验和功能。在本文中,我们将介绍在 .NET 8 上借助 YARP 构建网关(代号为 CETO)的过程。 反向代理 在开始编写 CETO 之前,我们必须决定使用反向代理。 我们应该使用外部的还是尝试自己制作? 这些外部的能涵盖我们所有的用例吗? 我们还必须考虑定制这些代理的高成本和持续维护。 我们的需求包括支持 HTTP/2、HTTP/3、WebSocket 等流协议、简单的可扩展性等等。 当我们开始了解 Microsoft 其他内部团队正在做的事情时,我们遇到了 YARP 项目。 YARP 代表:“又一个反向代理”。 该项目使用 ASP.NET ...
利用 Redis 使 AI 驱动的 .NET 应用程序更加一致和智能
本篇翻译于Catherine Wang的Making AI powered .NET apps more consistent and intelligent with Redis - .NET Blog (microsoft.com) Redis 是一种流行的内存数据存储,可用于解决构建和扩展智能应用程序的关键挑战。 在本文中,你将了解如何使用Redis的 Azure 缓存来提高使用 Azure OpenAI 的应用程序的效率。 Redis 的Azure 缓存不受最近的 Redis 许可证更新的影响: “我们将持续的合作以确保 Azure 客户能够无缝地利用 Azure Cache for Redis的所有层级。 Azure Cache for Redis、Azure Cache for Redis Enterprise 和 Enterprise Flash 服务不会中断,客户将收到及时的更新和错误修复,以保持最佳性能。” – Julia Liuson,开发部总裁 本博客包括两个示例应用程序: 第一个是基于.NET 揭秘检索增强生成的演示聊天语义内核(Semantic Kernel)应用程序。我添加了使用 Redis 保存额外知识并启用聊天历史记录的功能。 完整示例位于 Chat App with Redis 第二个是一个演示应用程序,它在 .NET 8 中使用 Redis OM d...
.NET 智能组件简介 – AI 驱动的 UI 控件
本篇翻译于Daniel Roth的Introducing .NET Smart Components - AI-powered UI controls AI的最新进展有望彻底改变我们与软件交互和使用软件的方式。然而,将AI功能集成到现有软件中可能面临一些挑战。 因此,我们开发了新的 .NET 智能组件,这是一组真正有用的AI支持的 UI 组件,您可以快速轻松地将其添加到 .NET 应用程序中。 您不必花费数周的开发时间来重新设计用户体验或研究机器学习和提示工程。 .NET 智能组件提供了预构建的端到端 AI 功能,您可以将其放入现有的应用程序 UI 中,以提高用户的工作效率。 目前,.NET智能组件仍处于试验阶段,最初可用于 .NET 6 及更高版本的 Blazor、MVC 和 Razor 页面。 我们计划为其他 .NET UI 框架(例如 .NET MAUI、WPF 和 Windows Forms)提供组件,但首先我们很想知道您对这些组件可用性的反馈,以及您希望增加哪些额外的功能。 观看 Steve Sanderson 演示 .NET 智能组件的功能: 它包含什么 .NET智能组件目前包括以下智能功能: 智能粘贴 只需单击按钮,智能粘贴就会自动使用用户剪贴板中的数据填充表单。 您可以将其与Web应用程序中的任何现有表单一起使用。 这有助于用户从外部源添加数据而无需重新输入。 ...
从 Azure 部署生成本地 .NET 密钥
本文翻译于Frank Boucher的Generate Local .NET Secrets from Azure Deployments . 通常,示例项目以一些“魔术字符串”开始,这些变量包含与部署或外部资源相关的 URL 和关键信息,我们必须更改这些信息才能使用示例。例如在 .NET 中,它可能如下所示: 本文展示了如何从 Azure 部署自动生成 .NET 密钥以及您的 .NET 应用程序如何读取这些密钥。用户想要尝试使用您的示例时,将不必再编辑任何内容! 他们只需使用 azd up 进行部署,然后使用 dotnet run 来执行应用程序。 听起来很有趣? 下面就来实现一下。 整个项目的代码可以在 GitHub 上的 fboucher/hikerai 中找到。 准备工作 Bicep 是一种为要部署的 Azure 资源创建基础结构定义的语言。由于这些资源将包含端点或模型名称等信息,因此我们需要一种导出这些信息的方法,在 Bicep 中我们使用输出语法: 使用 Azure Developer CLI (azd)命令 azd env get-values 返回键对值列表中的所有这些值。 PowerShell 或 Bash 脚本可以读取这些内容并使用命令 dotnet user-secrets set 创建新的 .NET secrets。 这里是脚本 postprovis...
使用 .NET 和 Teams Toolkit 构建 AI 机器人、扩展 Microsoft 365 的 Copilot 以及更多功能
本文翻译于Ayca Bas的Building AI Bots, Extending Copilot for Microsoft 365, and more with .NET and Teams Toolkit - .NET Blog Teams Toolkit for Visual Studio 帮助 .NET 开发人员为 Microsoft Teams 构建、调试和发布应用程序。我们很高兴向大家宣布,Teams Toolkit for Visual Studio 2022 17.9 版本为 .NET 开发人员提供了许多令人兴奋的新功能,例如新的 AI Bot 模板、Teams Bot 测试工具、自适应卡预览器以及更多改进、错误修复以改善您的开发体验。 让我们探索一下此版本提供的新功能! 新功能概述 Teams Toolkit for Visual Studio 17.9 版本发布包括新的 AI Bot 模板、Teams Bot 测试工具、自适应卡片预览器、生命周期步骤中的 CodeLens 支持以及对文档的直接访问。 新的AI Bot模板 新的 Teams AI Bot 模板可帮助开发人员开始构建智能聊天机器人,这些机器人可以利用 OpenAI 的强大功能处理信息并提供答案。此模板利用 Teams AI 库和 AI 组件,简化了使用 OpenAI API 密钥或 Azure OpenAI ...
64 位世界中的 WinForms – 我们的未来战略
本篇翻译于Klaus Loeffelmann的WinForms in a 64-Bit world - our strategy going forward 作为一个依靠创新和发展而蓬勃发展的社区的一部分,WinForms 开发人员经常突破界限来创造新的可能性。我们的开发人员还负责维护业务软件的关键任务线,这通常需要十年以上的时间。我们重视您的信任和您对使用我们的工具创建出色的软件解决方案的热情。 如您所知,Visual Studio 2022 从 32 位到 64 位的过渡引发了一些复杂问题。我们了解到这些变化在你们的开发过程中造成了一些麻烦,因此我们希望通过指出现有的解决方法以及我们针对这些问题的准备计划来澄清这些问题。 拥抱64位:更好的改变 转向64 位平台不仅仅是简单的升级。 这是一项重大改进,可以在多个方面帮助 Visual Studio 更好地工作。最大的好处之一是能够使用更多内存。 在 32 位版本中,Visual Studio 可以使用的内存量受到限制,通常这会导致性能下降,甚至在处理大型项目时出现错误。 64 位版本消除了这些限制,使 Visual Studio 能够以更高的效率处理更大的项目。 但这不仅仅是获得更多内存的问题。 切换到 64 位还使 Visual Studio 能够更好地利用计算机的处理器,尤其是它的多核。 由于 64 位应用程序可以一次处理更多数据,因此它可...
我们对 .NET 9 的愿景
本篇翻译于.NET Team 的 Our Vision for .NET 9。 欢迎来到.NET 9!继几个月前成功发布 .NET 8 之后,我们又进入了一个新年度发布周期。 我们建议开发人员将他们的应用程序迁移到 .NET 8。在这篇文章中,我们将分享我们对 .NET 9 的初步设想,它将于年底在 .NET Conf 2024 上发布。我们最关注的领域是云原生和智能应用程序开发。 您可以期待我们在提升性能、生产力和安全性以及整个平台的改进方面进行的巨大投入。 今天,让我们来看看我们计划与 Microsoft 合作伙伴团队合作交付的 .NET 9 重点领域和补充集成。 我们的目标是提高使用 Visual Studio、带有 C# 开发工具包的 Visual Studio Code 时 .NET的 开发效率,并且在使用 Azure 服务时,可以更轻松地进行云部署。 我们将继续与 Canonical 和 Red Hat 等行业合作伙伴密切合作,以确保 .NET 在您使用的任何地方都能正常工作。 .NET 9 正在成为该平台向前迈出的又一大步。 我们今天发布 .NET 9 Preview 1,欢迎您对我们发布的所有新功能提供反馈。 面向云原生开发者的平台 在过去的几年里,我们一直在努力构建强大的云原生基础,例如运行时性能和应用程序监控。 我们将继续这一努力。我们还将重点转向为当前流行的生产...