<?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>Azure Developer CLI | The .NET Blog</title><link>https://thedotnetblog.com/ca/tags/azure-developer-cli/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>ca</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/ca/tags/azure-developer-cli/index.xml" rel="self" type="application/rss+xml"/><item><title>Hooks d'azd en Python, TypeScript i .NET: adéu als scripts de shell</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/</guid><description>La CLI d'Azure Developer ara permet escriure hooks en Python, JavaScript, TypeScript o .NET. S'ha acabat canviar de context a Bash per executar un script de migració.</description><content:encoded>&lt;p&gt;&lt;em&gt;Aquesta publicació ha estat traduïda automàticament. Per a la versió original, &lt;a href="https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/"&gt;feu clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Si alguna vegada has tingut un projecte completament en .NET i tot i així has hagut d&amp;rsquo;escriure scripts Bash per als hooks d&amp;rsquo;azd, coneixes bé aquell dolor. Per què canviar a sintaxi de shell en un pas de pre-provisioning quan tota la resta del projecte és C#?&lt;/p&gt;
&lt;p&gt;Aquesta frustració té ara solució oficial. L&amp;rsquo;Azure Developer CLI &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;acaba de llançar suport multi-llenguatge per a hooks&lt;/a&gt;, i és exactament tan bo com sona.&lt;/p&gt;
&lt;h2 id="hooks-breument"&gt;Hooks, breument&lt;/h2&gt;
&lt;p&gt;Els hooks són scripts que s&amp;rsquo;executen en punts clau del cicle de vida d&amp;rsquo;&lt;code&gt;azd&lt;/code&gt; — abans del provisioning, després del desplegament, i més. Es defineixen a &lt;code&gt;azure.yaml&lt;/code&gt; i permeten injectar lògica personalitzada sense modificar la CLI.&lt;/p&gt;
&lt;p&gt;Abans només s&amp;rsquo;admetien Bash i PowerShell. Ara pots usar &lt;strong&gt;Python, JavaScript, TypeScript o .NET&lt;/strong&gt; — i &lt;code&gt;azd&lt;/code&gt; s&amp;rsquo;encarrega de la resta automàticament.&lt;/p&gt;
&lt;h2 id="com-funciona-la-detecció"&gt;Com funciona la detecció&lt;/h2&gt;
&lt;p&gt;Simplement apuntes el hook a un fitxer i &lt;code&gt;azd&lt;/code&gt; infereix el llenguatge per l&amp;rsquo;extensió:&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;Sense configuració addicional. Si l&amp;rsquo;extensió és ambigua, pots afegir &lt;code&gt;kind: python&lt;/code&gt; (o el que correspongui) per especificar-ho explícitament.&lt;/p&gt;
&lt;h2 id="detalls-importants-per-llenguatge"&gt;Detalls importants per llenguatge&lt;/h2&gt;
&lt;h3 id="python"&gt;Python&lt;/h3&gt;
&lt;p&gt;Col·loca un &lt;code&gt;requirements.txt&lt;/code&gt; o &lt;code&gt;pyproject.toml&lt;/code&gt; al costat del script (o en qualsevol directori pare) i &lt;code&gt;azd&lt;/code&gt; crea un entorn virtual, instal·la dependències i executa l&amp;rsquo;script.&lt;/p&gt;
&lt;h3 id="javascript-i-typescript"&gt;JavaScript i TypeScript&lt;/h3&gt;
&lt;p&gt;El mateix patró — posa un &lt;code&gt;package.json&lt;/code&gt; a prop del script i &lt;code&gt;azd&lt;/code&gt; executarà &lt;code&gt;npm install&lt;/code&gt; primer. Per a TypeScript, usa &lt;code&gt;npx tsx&lt;/code&gt; sense pas de compilació ni &lt;code&gt;tsconfig.json&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="net"&gt;.NET&lt;/h3&gt;
&lt;p&gt;Dos modes disponibles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mode projecte&lt;/strong&gt;: Si hi ha un &lt;code&gt;.csproj&lt;/code&gt; al costat del script, &lt;code&gt;azd&lt;/code&gt; executa &lt;code&gt;dotnet restore&lt;/code&gt; i &lt;code&gt;dotnet build&lt;/code&gt; automàticament.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mode single-file&lt;/strong&gt;: En .NET 10+, pots posar un fitxer &lt;code&gt;.cs&lt;/code&gt; independent i s&amp;rsquo;executa directament amb &lt;code&gt;dotnet run script.cs&lt;/code&gt;. Sense fitxer de projecte.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="configuració-per-executor"&gt;Configuració per executor&lt;/h2&gt;
&lt;p&gt;Cada llenguatge admet un bloc &lt;code&gt;config&lt;/code&gt; opcional:&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="per-què-importa-per-a-desenvolupadors-net"&gt;Per què importa per a desenvolupadors .NET&lt;/h2&gt;
&lt;p&gt;Els hooks eren l&amp;rsquo;últim lloc d&amp;rsquo;un projecte basat en azd que t&amp;rsquo;obligava a usar un altre llenguatge. Ara tot el pipeline de desplegament pot viure en un sol llenguatge. Pots reutilitzar les teves utilitats .NET existents als hooks, referenciar llibreries compartides i evitar el manteniment de scripts de shell.&lt;/p&gt;
&lt;h2 id="conclusió"&gt;Conclusió&lt;/h2&gt;
&lt;p&gt;És un d&amp;rsquo;aquells canvis que semblen petits però que eliminen molta fricció del dia a dia amb azd. El suport multi-llenguatge per a hooks ja està disponible — consulta el &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;post oficial&lt;/a&gt; per a la documentació completa.&lt;/p&gt;</content:encoded></item><item><title>azd + GitHub Copilot: Configuració de projecte amb IA i resolució intel·ligent d'errors</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</guid><description>L'Azure Developer CLI ara s'integra amb GitHub Copilot per generar la infraestructura del teu projecte i resoldre errors de desplegament — sense sortir del terminal.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Aquest article ha estat traduït automàticament. Per veure la versió original en anglès, &lt;a href="https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/"&gt;fes clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Coneixes aquell moment en què vols desplegar una aplicació existent a Azure i et quedes mirant un &lt;code&gt;azure.yaml&lt;/code&gt; en blanc, intentant recordar si la teva API Express hauria d&amp;rsquo;usar Container Apps o App Service? Aquell moment acaba de ser molt més curt.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) ara s&amp;rsquo;integra amb GitHub Copilot de dues maneres concretes: scaffolding assistit per IA durant &lt;code&gt;azd init&lt;/code&gt;, i resolució intel·ligent d&amp;rsquo;errors quan els desplegaments fallen. Les dues funcions es queden completament al terminal — exactament on vull que siguin.&lt;/p&gt;
&lt;h2 id="configuració-amb-copilot-durant-azd-init"&gt;Configuració amb Copilot durant azd init&lt;/h2&gt;
&lt;p&gt;Quan executes &lt;code&gt;azd init&lt;/code&gt;, ara apareix l&amp;rsquo;opció &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo;. Selecciona-la i Copilot analitza el teu codebase per generar l&amp;rsquo;&lt;code&gt;azure.yaml&lt;/code&gt;, les plantilles d&amp;rsquo;infraestructura i els mòduls Bicep — basant-se en el teu codi real.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd init
# Selecciona: &amp;#34;Set up with GitHub Copilot (Preview)&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Requisits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;azd 1.23.11 o superior&lt;/strong&gt; — comprova amb &lt;code&gt;azd version&lt;/code&gt; o actualitza amb &lt;code&gt;azd update&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Una subscripció activa de GitHub Copilot&lt;/strong&gt; (Individual, Business o 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; demanarà login si cal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El que trobo genuïnament útil és que funciona en els dos sentits. Construint des de zero? Copilot t&amp;rsquo;ajuda a configurar els serveis Azure correctes des del principi. Tens una app existent que vols desplegar? Apunta Copilot cap a ella i genera la configuració sense haver de reestructurar res.&lt;/p&gt;
&lt;h3 id="el-que-fa-realment"&gt;El que fa realment&lt;/h3&gt;
&lt;p&gt;Imagina que tens una API Express en Node.js amb dependència de PostgreSQL. En lloc de decidir manualment entre Container Apps i App Service, i després escriure Bicep des de zero, Copilot detecta el teu stack i genera:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un &lt;code&gt;azure.yaml&lt;/code&gt; amb els ajustaments correctes de &lt;code&gt;language&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt; i &lt;code&gt;build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Un mòdul Bicep per a Azure Container Apps&lt;/li&gt;
&lt;li&gt;Un mòdul Bicep per a Azure Database for PostgreSQL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I fa comprovacions prèvies abans de tocar res — verifica que el teu directori git estigui net, demana consentiment per a les eines del servidor MCP. Res no passa sense que sàpigues exactament què canviarà.&lt;/p&gt;
&lt;h2 id="resolució-derrors-amb-copilot"&gt;Resolució d&amp;rsquo;errors amb Copilot&lt;/h2&gt;
&lt;p&gt;Els errors de desplegament són inevitables. Paràmetres que falten, problemes de permisos, disponibilitat de SKUs — i el missatge d&amp;rsquo;error rarament et diu l&amp;rsquo;única cosa que realment necessites saber: &lt;em&gt;com solucionar-ho&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Sense Copilot, el cicle és: copiar l&amp;rsquo;error → buscar als docs → llegir tres respostes irrellevants de Stack Overflow → executar alguns comandos &lt;code&gt;az&lt;/code&gt; CLI → tornar-ho a intentar i rezar. Amb Copilot integrat a &lt;code&gt;azd&lt;/code&gt;, aquest cicle s&amp;rsquo;esfondra. Quan qualsevol comandament &lt;code&gt;azd&lt;/code&gt; falla, ofereix immediatament quatre opcions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Explain&lt;/strong&gt; — descripció en llenguatge natural del que ha anat malament&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guidance&lt;/strong&gt; — instruccions pas a pas per solucionar-ho&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diagnose and Guide&lt;/strong&gt; — anàlisi completa + Copilot aplica la solució (amb la teva aprovació) + reintent opcional&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip&lt;/strong&gt; — gestionar-ho tu mateix&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El punt clau: Copilot ja té context sobre el teu projecte, el comandament que ha fallat i la sortida de l&amp;rsquo;error. Les seves suggerències són específiques per a &lt;em&gt;la teva situació&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id="configurar-un-comportament-predeterminat"&gt;Configurar un comportament predeterminat&lt;/h3&gt;
&lt;p&gt;Si sempre tries la mateixa opció, salta el prompt interactiu:&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;Valors: &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;. També pots habilitar auto-fix i reintent:&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;Torna al mode interactiu en qualsevol moment:&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="conclusió"&gt;Conclusió&lt;/h2&gt;
&lt;p&gt;Executa &lt;code&gt;azd update&lt;/code&gt; per obtenir la versió més recent i usa &lt;code&gt;azd init&lt;/code&gt; en el teu proper projecte. És exactament el tipus d&amp;rsquo;integració de Copilot que aporta valor real.&lt;/p&gt;
&lt;p&gt;Llegeix l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-copilot-integration/"&gt;anunci original aquí&lt;/a&gt;.&lt;/p&gt;</content:encoded></item></channel></rss>