<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Azd | The .NET Blog</title><link>https://thedotnetblog.com/zh/tags/azd/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>zh</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Thu, 23 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/zh/tags/azd/index.xml" rel="self" type="application/rss+xml"/><item><title>azd钩子支持Python、TypeScript和.NET：告别Shell脚本</title><link>https://thedotnetblog.com/zh/news/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/zh/news/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/</guid><description>Azure Developer CLI现在支持用Python、JavaScript、TypeScript或.NET编写钩子。不再需要仅仅为了运行迁移脚本就切换到Bash。</description><content:encoded>&lt;p&gt;&lt;em&gt;本文已自动翻译。如需查看原始版本，请&lt;a href="https://thedotnetblog.com/zh/news/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/"&gt;点击此处&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;如果你曾经有一个完全用.NET构建的项目，却还需要为azd钩子编写Bash脚本，你一定懂那种痛苦。当项目其他部分都是C#时，为什么要在pre-provisioning步骤中切换到Shell语法呢？&lt;/p&gt;
&lt;p&gt;这个问题现在有了官方解决方案。Azure Developer CLI &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;刚刚发布了钩子的多语言支持&lt;/a&gt;，效果正如预期的那么好。&lt;/p&gt;
&lt;h2 id="什么是钩子"&gt;什么是钩子&lt;/h2&gt;
&lt;p&gt;钩子是在&lt;code&gt;azd&lt;/code&gt;生命周期关键节点运行的脚本——预置配置之前、部署之后等。它们在&lt;code&gt;azure.yaml&lt;/code&gt;中定义，无需修改CLI即可注入自定义逻辑。&lt;/p&gt;
&lt;p&gt;此前只支持Bash和PowerShell。现在可以使用&lt;strong&gt;Python、JavaScript、TypeScript或.NET&lt;/strong&gt;——&lt;code&gt;azd&lt;/code&gt;会自动处理其余的一切。&lt;/p&gt;
&lt;h2 id="检测机制"&gt;检测机制&lt;/h2&gt;
&lt;p&gt;只需将钩子指向一个文件，&lt;code&gt;azd&lt;/code&gt;就会从文件扩展名推断语言：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;hooks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/setup.py&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postdeploy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/seed.ts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/migrate.cs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;无需额外配置。如果扩展名不明确，可以添加&lt;code&gt;kind: python&lt;/code&gt;（或相应语言）来明确指定。&lt;/p&gt;
&lt;h2 id="各语言的重要细节"&gt;各语言的重要细节&lt;/h2&gt;
&lt;h3 id="python"&gt;Python&lt;/h3&gt;
&lt;p&gt;在脚本旁边（或任意父目录中）放置&lt;code&gt;requirements.txt&lt;/code&gt;或&lt;code&gt;pyproject.toml&lt;/code&gt;，&lt;code&gt;azd&lt;/code&gt;会自动创建虚拟环境、安装依赖并运行脚本。&lt;/p&gt;
&lt;h3 id="javascript和typescript"&gt;JavaScript和TypeScript&lt;/h3&gt;
&lt;p&gt;同样的模式——在脚本附近放置&lt;code&gt;package.json&lt;/code&gt;，&lt;code&gt;azd&lt;/code&gt;会先运行&lt;code&gt;npm install&lt;/code&gt;。对于TypeScript，使用&lt;code&gt;npx tsx&lt;/code&gt;，无需编译步骤，也不需要&lt;code&gt;tsconfig.json&lt;/code&gt;。&lt;/p&gt;
&lt;h3 id="net"&gt;.NET&lt;/h3&gt;
&lt;p&gt;提供两种模式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;项目模式&lt;/strong&gt;：如果脚本旁边有&lt;code&gt;.csproj&lt;/code&gt;文件，&lt;code&gt;azd&lt;/code&gt;会自动运行&lt;code&gt;dotnet restore&lt;/code&gt;和&lt;code&gt;dotnet build&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;单文件模式&lt;/strong&gt;：在.NET 10+上，独立的&lt;code&gt;.cs&lt;/code&gt;文件可通过&lt;code&gt;dotnet run script.cs&lt;/code&gt;直接运行，无需项目文件。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="执行器特定配置"&gt;执行器特定配置&lt;/h2&gt;
&lt;p&gt;每种语言都支持可选的&lt;code&gt;config&lt;/code&gt;块：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;hooks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/setup.ts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;packageManager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pnpm&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/migrate.cs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Release&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;framework&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;net10.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="对net开发者的意义"&gt;对.NET开发者的意义&lt;/h2&gt;
&lt;p&gt;钩子曾是基于azd的项目中最后一个强制语言切换的地方。现在，整个部署流水线——从应用代码到基础设施脚本再到生命周期钩子——都可以使用同一种语言。你可以在钩子中复用现有的.NET工具，引用共享类库，不再需要维护Shell脚本。&lt;/p&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;p&gt;这看起来是个小改动，但它切实减少了日常azd工作流程中的摩擦。钩子的多语言支持现已可用——查阅&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;官方文章&lt;/a&gt;获取完整文档。&lt;/p&gt;</content:encoded></item><item><title>azd + GitHub Copilot：AI 驱动的项目设置和智能错误修复</title><link>https://thedotnetblog.com/zh/news/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</link><pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/zh/news/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</guid><description>Azure Developer CLI 现已与 GitHub Copilot 集成，可以生成项目基础架构并修复部署错误——无需离开终端。</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;本文为自动翻译。如需阅读英文原文，请&lt;a href="https://thedotnetblog.com/zh/news/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/"&gt;点击这里&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;你是否有过这样的经历：想把现有应用部署到 Azure，却盯着空白的 &lt;code&gt;azure.yaml&lt;/code&gt; 发呆，想不起来 Express API 到底该用 Container Apps 还是 App Service？这种时刻即将成为历史。&lt;/p&gt;
&lt;p&gt;Azure Developer CLI（&lt;code&gt;azd&lt;/code&gt;）现已与 GitHub Copilot 以两种实用的方式集成：&lt;code&gt;azd init&lt;/code&gt; 时的 AI 辅助项目脚手架，以及部署失败时的智能错误排查。两项功能都完全在终端内运行——正是我想要的方式。&lt;/p&gt;
&lt;h2 id="在-azd-init-中使用-copilot-设置"&gt;在 azd init 中使用 Copilot 设置&lt;/h2&gt;
&lt;p&gt;运行 &lt;code&gt;azd init&lt;/code&gt; 时，现在会出现&amp;quot;Set up with GitHub Copilot (Preview)&amp;ldquo;选项。选择它，Copilot 会分析你的代码库，根据实际代码生成 &lt;code&gt;azure.yaml&lt;/code&gt;、基础架构模板和 Bicep 模块。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd init
# 选择：&amp;#34;Set up with GitHub Copilot (Preview)&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;前提条件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;azd 1.23.11 或更高版本&lt;/strong&gt; — 用 &lt;code&gt;azd version&lt;/code&gt; 检查，或用 &lt;code&gt;azd update&lt;/code&gt; 更新&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;有效的 GitHub Copilot 订阅&lt;/strong&gt;（Individual、Business 或 Enterprise）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub CLI（&lt;code&gt;gh&lt;/code&gt;）&lt;/strong&gt; — 必要时 &lt;code&gt;azd&lt;/code&gt; 会提示登录&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我觉得真正实用的是它能双向工作。从零开始构建？Copilot 从一开始就帮你配置正确的 Azure 服务。有现有应用想部署？把 Copilot 指向它，无需重构代码即可生成配置。&lt;/p&gt;
&lt;h3 id="它实际做什么"&gt;它实际做什么&lt;/h3&gt;
&lt;p&gt;假设你有一个 Node.js Express API，依赖 PostgreSQL。不必手动在 Container Apps 和 App Service 之间抉择，也不必从零编写 Bicep，Copilot 检测到你的技术栈后会生成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;包含正确 &lt;code&gt;language&lt;/code&gt;、&lt;code&gt;host&lt;/code&gt; 和 &lt;code&gt;build&lt;/code&gt; 设置的 &lt;code&gt;azure.yaml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Azure Container Apps 的 Bicep 模块&lt;/li&gt;
&lt;li&gt;Azure Database for PostgreSQL 的 Bicep 模块&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;并在做任何更改前运行预检——验证 git 工作目录是否干净，提前请求 MCP 服务器工具的授权。一切都在你知情的情况下进行。&lt;/p&gt;
&lt;h2 id="copilot-驱动的错误排查"&gt;Copilot 驱动的错误排查&lt;/h2&gt;
&lt;p&gt;部署错误无可避免。缺少参数、权限问题、SKU 可用性问题——而错误信息很少告诉你真正需要知道的那一件事：&lt;em&gt;如何修复&lt;/em&gt;。&lt;/p&gt;
&lt;p&gt;没有 Copilot 时的循环：复制错误 → 搜索文档 → 读三篇不相关的 Stack Overflow 回答 → 运行一些 &lt;code&gt;az&lt;/code&gt; CLI 命令 → 重试并祈祷。有了集成在 &lt;code&gt;azd&lt;/code&gt; 中的 Copilot，这个循环消失了。任何 &lt;code&gt;azd&lt;/code&gt; 命令失败时，它会立即提供四个选项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Explain&lt;/strong&gt; — 用通俗语言解释出了什么问题&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guidance&lt;/strong&gt; — 逐步修复指导&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diagnose and Guide&lt;/strong&gt; — 完整分析 + Copilot 应用修复（经你批准）+ 可选重试&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip&lt;/strong&gt; — 自己处理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关键在于：Copilot 已经了解你的项目、失败的命令和错误详情。它的建议针对&lt;em&gt;你的具体情况&lt;/em&gt;，而非泛泛的文档。&lt;/p&gt;
&lt;h3 id="设置默认行为"&gt;设置默认行为&lt;/h3&gt;
&lt;p&gt;如果你总是选择同一个选项，可以跳过交互式提示：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config set copilot.errorHandling.category troubleshoot
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;可选值：&lt;code&gt;explain&lt;/code&gt;、&lt;code&gt;guidance&lt;/code&gt;、&lt;code&gt;troubleshoot&lt;/code&gt;、&lt;code&gt;fix&lt;/code&gt;、&lt;code&gt;skip&lt;/code&gt;。还可以启用自动修复和重试：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config set copilot.errorHandling.fix allow
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;随时重置为交互模式：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config unset copilot.errorHandling.category
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;p&gt;这正是真正有价值的 Copilot 集成。运行 &lt;code&gt;azd update&lt;/code&gt; 获取最新版本，在下一个项目中试试 &lt;code&gt;azd init&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;阅读&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-copilot-integration/"&gt;原文公告&lt;/a&gt;。&lt;/p&gt;</content:encoded></item><item><title>azd update — 一个命令搞定所有包管理器</title><link>https://thedotnetblog.com/zh/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/zh/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/</guid><description>Azure Developer CLI 现在有了一个通用的更新命令，无论你是通过 winget、Homebrew、Chocolatey 还是安装脚本安装的，都能正常工作。</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;本文为自动翻译。查看原文请&lt;a href="https://thedotnetblog.com/zh/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/"&gt;点击这里&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;你知道那个每隔几周就会弹出来的&amp;quot;azd 有新版本可用&amp;quot;提示吗？就是那个你总是忽略掉的，因为你根本想不起来当初是用 winget、Homebrew 还是半年前跑的那个 curl 脚本安装的 &lt;code&gt;azd&lt;/code&gt;。好了，这个问题终于解决了。&lt;/p&gt;
&lt;p&gt;Microsoft 刚刚发布了 &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;&lt;code&gt;azd update&lt;/code&gt;&lt;/a&gt; — 一个命令就能将 Azure Developer CLI 更新到最新版本，不管你最初是怎么安装的。Windows、macOS、Linux — 都一样。就一个命令。&lt;/p&gt;
&lt;h2 id="工作原理"&gt;工作原理&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;就这么简单。如果你想提前体验新功能，可以切换到每日 Insiders 构建：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update --channel daily
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update --channel stable
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个命令会自动检测你当前的安装方式，并在后台使用对应的更新机制。再也不用纠结&amp;quot;等等，这台机器上我用的是 winget 还是 choco 来着？&amp;quot;&lt;/p&gt;
&lt;h2 id="一个小前提"&gt;一个小前提&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd update&lt;/code&gt; 从版本 1.23.x 开始提供。如果你用的是更早的版本，需要用原来的安装方式做最后一次手动更新。之后，&lt;code&gt;azd update&lt;/code&gt; 就能接管一切了。&lt;/p&gt;
&lt;p&gt;用 &lt;code&gt;azd version&lt;/code&gt; 查看你当前的版本。如果需要全新安装，&lt;a href="https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd"&gt;安装文档&lt;/a&gt; 可以帮到你。&lt;/p&gt;
&lt;h2 id="为什么这很重要"&gt;为什么这很重要&lt;/h2&gt;
&lt;p&gt;这是一个小小的生活质量改善，但对于我们这些每天都在用 &lt;code&gt;azd&lt;/code&gt; 把 AI Agent 和 Aspire 应用部署到 Azure 的人来说，保持最新意味着更少的&amp;quot;这个 bug 在最新版本里已经修复了&amp;quot;的尴尬时刻。少操心一件事。&lt;/p&gt;
&lt;p&gt;阅读 &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;完整公告&lt;/a&gt; 和 Jon Gallant 的 &lt;a href="https://blog.jongallant.com/2026/04/azd-update"&gt;深入分析&lt;/a&gt; 了解更多。&lt;/p&gt;</content:encoded></item><item><title>azd现在可以在本地运行和调试AI代理了 — 2026年3月都有哪些变化</title><link>https://thedotnetblog.com/zh/news/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/zh/news/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</guid><description>Azure Developer CLI在2026年3月发布了七个版本。亮点：AI代理的本地运行和调试循环、GitHub Copilot项目设置集成、Container App Jobs支持。</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;本文为自动翻译。查看原始版本，请&lt;a href="https://thedotnetblog.com/zh/news/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/"&gt;点击这里&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;一个月七个版本。这是Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) 团队在2026年3月发布的成果，而头条功能正是我一直在等的：&lt;strong&gt;AI代理的本地运行和调试循环&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;PC Chan &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;发布了完整摘要&lt;/a&gt;，虽然内容很多，但让我筛选出对构建AI驱动应用的.NET开发者真正重要的部分。&lt;/p&gt;
&lt;h2 id="不用部署就能运行和调试ai代理"&gt;不用部署就能运行和调试AI代理&lt;/h2&gt;
&lt;p&gt;这是最大的亮点。新的 &lt;code&gt;azure.ai.agents&lt;/code&gt; 扩展添加了一组命令，为AI代理提供了完整的内循环体验：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;azd ai agent run&lt;/code&gt; — 在本地启动你的代理&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt; — 向其发送消息（本地或已部署的）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent show&lt;/code&gt; — 显示容器状态和健康状况&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt; — 实时流式传输容器日志&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以前，测试AI代理意味着每次修改都要部署到Microsoft Foundry。现在你可以在本地迭代，测试代理行为，准备好了再部署。&lt;/p&gt;
&lt;h2 id="github-copilot为你配置azd项目"&gt;GitHub Copilot为你配置azd项目&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd init&lt;/code&gt; 现在提供了&amp;quot;Set up with GitHub Copilot (Preview)&amp;ldquo;选项。无需手动回答关于项目结构的提示，Copilot代理为你生成配置。当命令失败时，&lt;code&gt;azd&lt;/code&gt; 提供AI辅助的问题排查——全程不需要离开终端。&lt;/p&gt;
&lt;h2 id="container-app-jobs和部署改进"&gt;Container App Jobs和部署改进&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Container App Jobs&lt;/strong&gt;：&lt;code&gt;azd&lt;/code&gt;现在通过现有的&lt;code&gt;host: containerapp&lt;/code&gt;配置部署&lt;code&gt;Microsoft.App/jobs&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可配置的部署超时&lt;/strong&gt;：&lt;code&gt;azd deploy&lt;/code&gt;的新&lt;code&gt;--timeout&lt;/code&gt;标志和&lt;code&gt;azure.yaml&lt;/code&gt;中的&lt;code&gt;deployTimeout&lt;/code&gt;字段。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;远程构建回退&lt;/strong&gt;：当ACR构建失败时，&lt;code&gt;azd&lt;/code&gt;自动回退到本地Docker/Podman构建。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;本地预检验证&lt;/strong&gt;：部署前在本地验证Bicep参数。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="开发体验改进"&gt;开发体验改进&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;自动检测pnpm/yarn&lt;/strong&gt; — JS/TS项目&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pyproject.toml支持&lt;/strong&gt; — Python打包&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;本地模板目录&lt;/strong&gt; — &lt;code&gt;azd init --template&lt;/code&gt;接受文件系统路径&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更好的错误消息&lt;/strong&gt; — &lt;code&gt;--no-prompt&lt;/code&gt;模式&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;构建环境变量&lt;/strong&gt; — 注入到所有框架构建子进程（.NET、Node.js、Java、Python）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;p&gt;本地AI代理调试循环是这个版本的明星，但部署改进和DX优化的积累使&lt;code&gt;azd&lt;/code&gt;比以往更加成熟。如果你在Azure上部署.NET应用——特别是AI代理——这次更新值得关注。&lt;/p&gt;
&lt;p&gt;查看&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;完整发行说明&lt;/a&gt;了解所有细节。&lt;/p&gt;</content:encoded></item><item><title>从笔记本到生产：用两个命令将 AI 代理部署到 Microsoft Foundry</title><link>https://thedotnetblog.com/zh/news/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/zh/news/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/</guid><description>Azure Developer CLI 现在有了 'azd ai agent' 命令，可以在几分钟内将你的 AI 代理从本地开发带到 Foundry 的生产端点。这是完整的工作流程。</description><content:encoded>&lt;p&gt;你知道&amp;quot;在我的机器上能跑&amp;quot;和&amp;quot;已部署并正在处理流量&amp;quot;之间的鸿沟吗？对于 AI 代理来说，这个鸿沟一直痛苦地大。你需要配置资源、部署模型、配置身份、设置监控 — 这些都是在任何人能实际调用你的代理之前要做的。&lt;/p&gt;
&lt;p&gt;Azure Developer CLI 刚刚把这变成了&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;两个命令的事&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id="新的-azd-ai-agent-工作流"&gt;新的 &lt;code&gt;azd ai agent&lt;/code&gt; 工作流&lt;/h2&gt;
&lt;p&gt;让我带你看看这实际是什么样子。你有一个 AI 代理项目 — 比如说一个酒店礼宾代理。它在本地运行正常。你想让它在 Microsoft Foundry 上运行。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;就这样。两个命令。&lt;code&gt;azd ai agent init&lt;/code&gt; 在你的仓库中生成基础设施即代码，&lt;code&gt;azd up&lt;/code&gt; 在 Azure 上配置一切并发布你的代理。你会得到一个直接指向 Foundry 门户中你的代理的链接。&lt;/p&gt;
&lt;h2 id="底层发生了什么"&gt;底层发生了什么&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;init&lt;/code&gt; 命令在你的仓库中生成真实的、可检查的 Bicep 模板：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一个 &lt;strong&gt;Foundry Resource&lt;/strong&gt;（顶层容器）&lt;/li&gt;
&lt;li&gt;一个 &lt;strong&gt;Foundry Project&lt;/strong&gt;（你的代理所在的地方）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;模型部署&lt;/strong&gt;配置（GPT-4o 等）&lt;/li&gt;
&lt;li&gt;带有适当 RBAC 角色分配的&lt;strong&gt;托管身份&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;服务映射用的 &lt;code&gt;azure.yaml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;带有代理元数据和环境变量的 &lt;code&gt;agent.yaml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关键是：这一切都是你的。它是仓库中的版本化 Bicep。你可以检查它、自定义它，并与你的代理代码一起提交。没有魔法黑盒。&lt;/p&gt;
&lt;h2 id="开发内循环"&gt;开发内循环&lt;/h2&gt;
&lt;p&gt;我真正喜欢的是本地开发体验。当你在迭代代理逻辑时，不想每次改变提示词都重新部署：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这会在本地启动你的代理。配合 &lt;code&gt;azd ai agent invoke&lt;/code&gt; 发送测试提示，你就有了一个紧密的反馈循环。编辑代码、重启、调用、重复。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;invoke&lt;/code&gt; 命令的路由也很智能 — 当本地代理在运行时，它会自动指向本地。不在运行时，指向远程端点。&lt;/p&gt;
&lt;h2 id="实时监控"&gt;实时监控&lt;/h2&gt;
&lt;p&gt;这是说服我的功能。一旦你的代理部署完成：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent monitor --follow
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;流经你的代理的每个请求和响应都会实时传输到你的终端。对于调试生产问题，这是无价之宝。不用挖 Log Analytics，不用等指标聚合 — 你看到的就是现在正在发生的事情。&lt;/p&gt;
&lt;h2 id="完整的命令集"&gt;完整的命令集&lt;/h2&gt;
&lt;p&gt;快速参考：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;用 IaC 搭建 Foundry 代理项目&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd up&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;配置 Azure 资源并部署代理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;向远程或本地代理发送提示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent run&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;在本地运行代理用于开发&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;从已发布的代理流式传输实时日志&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;检查代理健康状态和状态&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd down&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;清理所有 Azure 资源&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="为什么这对-net-开发者重要"&gt;为什么这对 .NET 开发者重要&lt;/h2&gt;
&lt;p&gt;虽然公告中的示例是基于 Python 的，但基础设施的故事是语言无关的。你的 .NET 代理得到相同的 Bicep 脚手架、相同的托管身份设置、相同的监控管道。如果你已经在用 &lt;code&gt;azd&lt;/code&gt; 部署 .NET Aspire 应用或 Azure 部署，这直接融入你现有的工作流。&lt;/p&gt;
&lt;p&gt;AI 代理的部署鸿沟一直是生态系统中最大的摩擦点之一。从一个工作原型到一个具有适当身份、网络和监控的生产端点，不应该需要一周的 DevOps 工作。现在只需要两个命令和几分钟。&lt;/p&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd ai agent&lt;/code&gt; 现在可用。如果你一直因为基础设施设置看起来工作量太大而推迟部署 AI 代理，试试看。查看&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;完整教程&lt;/a&gt;获取包括前端聊天应用集成在内的完整步骤。&lt;/p&gt;</content:encoded></item></channel></rss>