<?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>The .NET Blog</title><link>https://thedotnetblog.com/nl/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>nl</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Sat, 25 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/nl/index.xml" rel="self" type="application/rss+xml"/><item><title>.NET 10 wordt Geleverd met Ubuntu 26.04 LTS — Dit Is Nieuw</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/dotnet-ubuntu-2604-resolute-raccoon-net10/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/dotnet-ubuntu-2604-resolute-raccoon-net10/</guid><description>Ubuntu 26.04 LTS (Resolute Raccoon) is uitgebracht met .NET 10 als eersteklas toolchain. Native AOT, Chiseled containers, Linux 7.0.</description><content:encoded>&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Klik &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/dotnet-ubuntu-2604-resolute-raccoon-net10/"&gt;hier&lt;/a&gt; voor de originele versie.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Het is Ubuntu LTS-dag. &lt;a href="https://canonical.com/blog/canonical-releases-ubuntu-26-04-lts-resolute-raccoon"&gt;Ubuntu 26.04 (Resolute Raccoon)&lt;/a&gt; is vandaag uitgebracht met &lt;a href="https://devblogs.microsoft.com/dotnet/whats-new-for-dotnet-in-ubuntu-2604/"&gt;.NET 10&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="net-10-in-twee-commandos-installeren"&gt;.NET 10 in twee commando&amp;rsquo;s installeren&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;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install dotnet-sdk-10.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;.NET is een van de &lt;a href="https://ubuntu.com/toolchains"&gt;officieel ondersteunde toolchains op Ubuntu&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="containers--noble-bijwerken-naar--resolute"&gt;Containers: &lt;code&gt;-noble&lt;/code&gt; bijwerken naar &lt;code&gt;-resolute&lt;/code&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;sed -i &lt;span class="s2"&gt;&amp;#34;s/noble/resolute/g&amp;#34;&lt;/span&gt; Dockerfile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="native-aot-3ms-opstart-14mb-binair-bestand"&gt;Native AOT: 3ms opstart, 1,4MB binair bestand&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;apt install -y dotnet-sdk-aot-10.0 clang
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet publish app.cs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# native binair bestand van 1,4MB, opstart in 3ms&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Voor cloud-native workloads waarbij koude starttijd belangrijk is — Functions, containers, serverless — een echte gamechanger.&lt;/p&gt;
&lt;h2 id="net-8-of-9-nodig"&gt;.NET 8 of 9 nodig?&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;apt install -y software-properties-common
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;add-apt-repository ppa:dotnet/backports
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt install -y dotnet-sdk-8.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Het &lt;a href="https://devblogs.microsoft.com/dotnet/whats-new-for-dotnet-in-ubuntu-2604/"&gt;volledige bericht&lt;/a&gt; bevat meer details.&lt;/p&gt;</content:encoded></item><item><title>Azure MCP Server Is Nu een .mcpb — Installeer het Zonder Runtime</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/</guid><description>Azure MCP Server is nu beschikbaar als MCP Bundle (.mcpb) — download, sleep naar Claude Desktop en klaar. Geen Node.js, Python of .NET vereist.</description><content:encoded>&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Klik &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/"&gt;hier&lt;/a&gt; voor de originele versie.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Weet je wat vervelend was aan het instellen van MCP-servers? Je had een runtime nodig. Node.js voor de npm-versie, Python voor pip/uvx, .NET SDK voor de dotnet-variant.&lt;/p&gt;
&lt;p&gt;De &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;Azure MCP Server heeft dat net veranderd&lt;/a&gt;. Het is nu beschikbaar als &lt;code&gt;.mcpb&lt;/code&gt; — een MCP Bundle — en de installatie is slepen en neerzetten.&lt;/p&gt;
&lt;h2 id="wat-is-een-mcp-bundle"&gt;Wat is een MCP Bundle?&lt;/h2&gt;
&lt;p&gt;Denk eraan als een VS Code-extensie (&lt;code&gt;.vsix&lt;/code&gt;) of een browserextensie (&lt;code&gt;.crx&lt;/code&gt;), maar voor MCP-servers. Een &lt;code&gt;.mcpb&lt;/code&gt;-bestand is een zelfstandig ZIP-archief met de serverbinary en alle afhankelijkheden.&lt;/p&gt;
&lt;h2 id="hoe-te-installeren"&gt;Hoe te installeren&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. Download de bundle voor uw platform&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ga naar de &lt;a href="https://github.com/microsoft/mcp/releases?q=Azure.Mcp.Server"&gt;GitHub Releases-pagina&lt;/a&gt; en download het &lt;code&gt;.mcpb&lt;/code&gt;-bestand voor uw OS en architectuur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Installeer in Claude Desktop&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Het gemakkelijkst: sleep het &lt;code&gt;.mcpb&lt;/code&gt;-bestand naar het Claude Desktop-venster terwijl u op de pagina Extensie-instellingen bent (&lt;code&gt;☰ → Bestand → Instellingen → Extensies&lt;/code&gt;). Bekijk de serverdetails, klik op Installeren, bevestig.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Verifieer bij Azure&lt;/strong&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;az login
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="aan-de-slag"&gt;Aan de slag&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Download&lt;/strong&gt;: &lt;a href="https://github.com/microsoft/mcp/releases?q=Azure.Mcp.Server-"&gt;GitHub Releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://aka.ms/azmcp"&gt;aka.ms/azmcp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docs&lt;/strong&gt;: &lt;a href="https://aka.ms/azmcp/docs"&gt;aka.ms/azmcp/docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bekijk het &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;volledige bericht&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>CodeAct in Agent Framework: Hoe je de latentie van je agent halveert</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/</guid><description>CodeAct comprimeert meerstapige tool-ketens tot één sandbox-codeblok — 52% minder latentie en 64% minder tokengebruik. Wat het betekent voor je agenten en wanneer je het gebruikt.</description><content:encoded>&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor de originele versie, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In elk agentproject is er dat moment waarop je naar de trace kijkt en denkt: &amp;ldquo;waarom duurt dit zo lang?&amp;rdquo; Het model werkt goed. De tools doen wat ze moeten doen. Maar er zijn zeven rondes nodig voor een resultaat dat je in één keer kunt berekenen.&lt;/p&gt;
&lt;p&gt;Dat is precies het probleem dat CodeAct oplost — en het &lt;a href="https://devblogs.microsoft.com/agent-framework/codeact-with-hyperlight/"&gt;Agent Framework team heeft zojuist alpha-ondersteuning uitgebracht&lt;/a&gt; via het nieuwe pakket &lt;code&gt;agent-framework-hyperlight&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="wat-is-codeact"&gt;Wat is CodeAct?&lt;/h2&gt;
&lt;p&gt;Het &lt;a href="https://arxiv.org/abs/2402.01030"&gt;CodeAct-patroon&lt;/a&gt; is elegant eenvoudig: in plaats van het model een lijst tools te geven om één voor één aan te roepen, geef je het één &lt;code&gt;execute_code&lt;/code&gt;-tool en laat je het het &lt;em&gt;hele plan&lt;/em&gt; uitdrukken als een kort Python-programma.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aanpak&lt;/th&gt;
&lt;th&gt;Tijd&lt;/th&gt;
&lt;th&gt;Tokens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Traditioneel&lt;/td&gt;
&lt;td&gt;27,81s&lt;/td&gt;
&lt;td&gt;6.890&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CodeAct&lt;/td&gt;
&lt;td&gt;13,23s&lt;/td&gt;
&lt;td&gt;2.489&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Verbetering&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;52,4%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;63,9%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="beveiliging-hyperlight-micro-vms"&gt;Beveiliging: Hyperlight Micro-VM&amp;rsquo;s&lt;/h2&gt;
&lt;p&gt;Het pakket &lt;code&gt;agent-framework-hyperlight&lt;/code&gt; gebruikt &lt;a href="https://github.com/hyperlight-dev/hyperlight"&gt;Hyperlight&lt;/a&gt; micro-VM&amp;rsquo;s. Elke &lt;code&gt;execute_code&lt;/code&gt;-aanroep krijgt zijn eigen verse micro-VM. Opstarten duurt milliseconden. De isolatie is vrijwel gratis.&lt;/p&gt;
&lt;p&gt;Je tools blijven op de host draaien. De door het model gegenereerde &lt;em&gt;lijmcode&lt;/em&gt; draait in de sandbox. Dat is de juiste verdeling.&lt;/p&gt;
&lt;h2 id="minimale-configuratie"&gt;Minimale configuratie&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;agent_framework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;agent_framework_hyperlight&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;HyperlightCodeActProvider&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;codeact&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HyperlightCodeActProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;get_weather&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;approval_mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;never_require&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;CodeActAgent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;You are a helpful assistant.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;context_providers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;codeact&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="wanneer-codeact-gebruiken-en-wanneer-niet"&gt;Wanneer CodeAct gebruiken (en wanneer niet)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Gebruik CodeAct wanneer:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;De taak veel kleine tool-aanroepen aan elkaar koppelt (lookups, joins, berekeningen)&lt;/li&gt;
&lt;li&gt;Latentie en tokenkosten tellen&lt;/li&gt;
&lt;li&gt;Je sterke isolatie wil voor door het model gegenereerde code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Blijf bij traditionele tool-calling wanneer:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;De agent slechts één of twee tool-aanroepen per beurt maakt&lt;/li&gt;
&lt;li&gt;Elke aanroep bijwerkingen heeft die individueel goedgekeurd moeten worden&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="probeer-het-nu"&gt;Probeer het nu&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;pip install agent-framework-hyperlight --pre
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Lees het &lt;a href="https://devblogs.microsoft.com/agent-framework/codeact-with-hyperlight/"&gt;volledige bericht op de Agent Framework blog&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>GPT-5.5 Is Er en Komt naar Azure Foundry — Wat .NET-Ontwikkelaars Moeten Weten</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/</guid><description>GPT-5.5 is algemeen beschikbaar in Microsoft Foundry. De progressie van GPT-5 naar 5.5, wat er echt verbeterd is en hoe u vandaag aan de slag gaat in uw agents.</description><content:encoded>&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Klik &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/"&gt;hier&lt;/a&gt; voor de originele versie.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Microsoft heeft zojuist aangekondigd dat &lt;a href="https://azure.microsoft.com/en-us/blog/openais-gpt-5-5-in-microsoft-foundry-frontier-intelligence-on-an-enterprise-ready-platform/"&gt;GPT-5.5 algemeen beschikbaar is in Microsoft Foundry&lt;/a&gt;. Als u agents op Azure bouwt, is dit de update waarop u wachtte.&lt;/p&gt;
&lt;h2 id="de-gpt-5-progressie"&gt;De GPT-5 progressie&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPT-5&lt;/strong&gt;: combineerde redenering en snelheid in één systeem&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-5.4&lt;/strong&gt;: sterkere meerstaps-redenering, vroege agentische mogelijkheden voor enterprise&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-5.5&lt;/strong&gt;: diepere langecontextredenering, betrouwbaardere agentische uitvoering, betere tokenefficiëntie&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="wat-er-echt-veranderd-is"&gt;Wat er echt veranderd is&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Verbeterde agentische codering&lt;/strong&gt;: GPT-5.5 behoudt context over grote codebases, diagnosticeert architectuurfouten en anticipeert op testvereisten. Het model redeneert over &lt;em&gt;wat anders&lt;/em&gt; een oplossing beïnvloedt voordat het actie onderneemt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tokenefficiëntie&lt;/strong&gt;: Hogere kwaliteitsoutputs met minder tokens en minder pogingen. Direkt lagere kosten en latency voor productie-deployments.&lt;/p&gt;
&lt;h2 id="prijzen"&gt;Prijzen&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Invoer ($/M tokens)&lt;/th&gt;
&lt;th&gt;Gecachte invoer&lt;/th&gt;
&lt;th&gt;Uitvoer ($/M tokens)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5&lt;/td&gt;
&lt;td&gt;$5,00&lt;/td&gt;
&lt;td&gt;$0,50&lt;/td&gt;
&lt;td&gt;$30,00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5 Pro&lt;/td&gt;
&lt;td&gt;$30,00&lt;/td&gt;
&lt;td&gt;$3,00&lt;/td&gt;
&lt;td&gt;$180,00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="waarom-foundry-belangrijk-is"&gt;Waarom Foundry belangrijk is&lt;/h2&gt;
&lt;p&gt;Foundry Agent Service stelt u in staat agents in YAML te definiëren of ze te verbinden met Microsoft Agent Framework, GitHub Copilot SDK, LangGraph of OpenAI Agents SDK — en ze uit te voeren als geïsoleerde gehoste agents met een persistent bestandssysteem, een eigen Microsoft Entra-identiteit en scale-to-zero prijsstelling.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AIAgent&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;aiProjectClient&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsAIAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gpt-5.5&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;U bent een behulpzame assistent.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;MijnAgent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Bekijk de &lt;a href="https://azure.microsoft.com/en-us/blog/openais-gpt-5-5-in-microsoft-foundry-frontier-intelligence-on-an-enterprise-ready-platform/"&gt;volledige aankondiging&lt;/a&gt; voor alle details.&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.118: Copilot CLI Krijgt Sessienamen, Modelbadges en TypeScript 7.0 Nightly</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/vscode-1-118-copilot-cli-session-names-model-badge/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/vscode-1-118-copilot-cli-session-names-model-badge/</guid><description>Visual Studio Code 1.118 is een gerichte release met Copilot CLI-verbeteringen — sessienamen, modelbadges, automatische modelselectie en TypeScript 7.0 Nightly opt-in.</description><content:encoded>&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor de originele versie, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/vscode-1-118-copilot-cli-session-names-model-badge/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://code.visualstudio.com/updates/v1_118"&gt;Visual Studio Code 1.118&lt;/a&gt; is een kleinere, gerichte release — voornamelijk Copilot CLI-verbeteringen.&lt;/p&gt;
&lt;h2 id="copilot-cli-sessies-krijgen-echte-namen"&gt;Copilot CLI: Sessies Krijgen Echte Namen&lt;/h2&gt;
&lt;p&gt;De sessietitel-API&amp;rsquo;s van de Copilot CLI SDK worden nu gebruikt als bron van waarheid voor sessienamen. In plaats van automatisch gegenereerde labels tonen sessies nu de echte naam uit de SDK.&lt;/p&gt;
&lt;h2 id="sneller-wisselen-tussen-sessies"&gt;Sneller Wisselen Tussen Sessies&lt;/h2&gt;
&lt;p&gt;De Agents-app heeft nu &lt;code&gt;Ctrl+1&lt;/code&gt;, &lt;code&gt;Ctrl+2&lt;/code&gt;, enz. voor snel wisselen tussen sessies.&lt;/p&gt;
&lt;h2 id="modelbadges-in-de-chat"&gt;Modelbadges in de Chat&lt;/h2&gt;
&lt;p&gt;Copilot CLI-antwoorden in het chatpaneel tonen nu een modelbadge — je ziet in één oogopslag welk model elk verzoek heeft afgehandeld.&lt;/p&gt;
&lt;h2 id="automatische-modelselectie-in-copilot-cli"&gt;Automatische Modelselectie in Copilot CLI&lt;/h2&gt;
&lt;p&gt;De automatische modelselectie werkt nu ook in de Copilot CLI-agent.&lt;/p&gt;
&lt;h2 id="typescript-70-nightly-opt-in"&gt;TypeScript 7.0 Nightly Opt-in&lt;/h2&gt;
&lt;p&gt;Je kunt nu rechtstreeks vanuit de VS Code-instellingen kiezen voor het testen van TypeScript 7.0-nightlies. TypeScript 7.0 is een grote release (&lt;a href="https://devblogs.microsoft.com/typescript/announcing-typescript-7-0-beta/"&gt;de beta verscheen een paar dagen geleden&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Bekijk de &lt;a href="https://code.visualstudio.com/updates/v1_118"&gt;volledige release-opmerkingen&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Waar Onthoudt uw Agent Dingen? Een Praktische Gids voor Chat-geschiedenis Opslag</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</guid><description>Door de service of de client beheerd? Lineair of vertakkend? De architectuurbeslissing die bepaalt wat uw AI-agent echt kan doen — met codevoorbeelden in C# en Python.</description><content:encoded>&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Klik &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/"&gt;hier&lt;/a&gt; voor de originele versie.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Wanneer u een AI-agent bouwt, besteedt u het grootste deel van uw energie aan het model, de tools en de prompts. De vraag &lt;em&gt;waar de conversatiegeschiedenis leeft&lt;/em&gt; lijkt een implementatiedetail — maar het is een van de belangrijkste architectuurbeslissingen die u zult nemen.&lt;/p&gt;
&lt;p&gt;Het bepaalt of gebruikers gesprekken kunnen vertakken, antwoorden ongedaan kunnen maken, sessies na een herstart kunnen hervatten en of uw gegevens ooit uw infrastructuur verlaten. Het &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;Agent Framework-team heeft een diepgaande analyse gepubliceerd&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="twee-fundamentele-patronen"&gt;Twee fundamentele patronen&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Door de service beheerd&lt;/strong&gt;: de AI-service slaat de conversatiestatus op. Uw app bewaart een referentie en de service voegt automatisch de relevante geschiedenis toe aan elk verzoek.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Door de client beheerd&lt;/strong&gt;: uw app behoudt de volledige geschiedenis en stuurt relevante berichten met elk verzoek. De service is stateless. U beheert alles.&lt;/p&gt;
&lt;h2 id="hoe-agent-framework-dit-abstraheert"&gt;Hoe Agent Framework dit abstraheert&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Mijn naam is Alice.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Wat is mijn naam?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_session&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Mijn naam is Alice.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Wat is mijn naam?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="snelle-referentie-van-providers"&gt;Snelle referentie van providers&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Opslag&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Comprimering&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI/Azure Chat Completions&lt;/td&gt;
&lt;td&gt;Client&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;U&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foundry Agent Service&lt;/td&gt;
&lt;td&gt;Service&lt;/td&gt;
&lt;td&gt;Lineair&lt;/td&gt;
&lt;td&gt;Service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responses API (standaard)&lt;/td&gt;
&lt;td&gt;Service&lt;/td&gt;
&lt;td&gt;Vertakkend&lt;/td&gt;
&lt;td&gt;Service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic Claude, Ollama&lt;/td&gt;
&lt;td&gt;Client&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;U&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="hoe-te-kiezen"&gt;Hoe te kiezen&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Vertakking of &amp;ldquo;ongedaan maken&amp;rdquo; nodig?&lt;/strong&gt; → Responses API door service beheerd&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gegevenssouvereiniteit nodig?&lt;/strong&gt; → Door client beheerd met database-backend&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eenvoudige chatbot?&lt;/strong&gt; → Lineair door service beheerd is prima&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Lees het &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;volledige bericht&lt;/a&gt; voor de volledige beslissingsboom.&lt;/p&gt;</content:encoded></item><item><title>azd-hooks in Python, TypeScript en .NET: genoeg van shell-scripts</title><link>https://thedotnetblog.com/nl/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/nl/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/</guid><description>De Azure Developer CLI ondersteunt nu hooks in Python, JavaScript, TypeScript en .NET. Geen contextswitch meer naar Bash alleen voor een migratieScript.</description><content:encoded>&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor de originele versie, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Als je ooit een volledig .NET-project had en toch Bash-scripts moest schrijven voor azd-hooks, dan ken je dat gevoel maar al te goed. Waarom overstappen naar shell-syntax voor een pre-provisioning stap wanneer de rest van het project C# is?&lt;/p&gt;
&lt;p&gt;Die frustratie heeft nu een officiële oplossing. De Azure Developer CLI heeft &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;multi-taalondersteuning voor hooks uitgebracht&lt;/a&gt;, en het is precies zo goed als het klinkt.&lt;/p&gt;
&lt;h2 id="wat-zijn-hooks"&gt;Wat zijn hooks&lt;/h2&gt;
&lt;p&gt;Hooks zijn scripts die worden uitgevoerd op cruciale momenten in de &lt;code&gt;azd&lt;/code&gt;-levenscyclus — voor provisioning, na deployment, en meer. Ze worden gedefinieerd in &lt;code&gt;azure.yaml&lt;/code&gt; en maken het mogelijk om aangepaste logica te injecteren zonder de CLI aan te passen.&lt;/p&gt;
&lt;p&gt;Voorheen werden alleen Bash en PowerShell ondersteund. Nu kun je &lt;strong&gt;Python, JavaScript, TypeScript of .NET&lt;/strong&gt; gebruiken — en &lt;code&gt;azd&lt;/code&gt; regelt de rest automatisch.&lt;/p&gt;
&lt;h2 id="hoe-detectie-werkt"&gt;Hoe detectie werkt&lt;/h2&gt;
&lt;p&gt;Wijs de hook naar een bestand en &lt;code&gt;azd&lt;/code&gt; leidt de taal af uit de extensie:&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;Geen extra configuratie nodig. Als de extensie onduidelijk is, kun je &lt;code&gt;kind: python&lt;/code&gt; (of de betreffende taal) expliciet toevoegen.&lt;/p&gt;
&lt;h2 id="taalspecifieke-details"&gt;Taalspecifieke details&lt;/h2&gt;
&lt;h3 id="python"&gt;Python&lt;/h3&gt;
&lt;p&gt;Plaats een &lt;code&gt;requirements.txt&lt;/code&gt; of &lt;code&gt;pyproject.toml&lt;/code&gt; naast het script (of in een bovenliggende map). &lt;code&gt;azd&lt;/code&gt; maakt automatisch een virtuele omgeving, installeert afhankelijkheden en voert het script uit.&lt;/p&gt;
&lt;h3 id="javascript-en-typescript"&gt;JavaScript en TypeScript&lt;/h3&gt;
&lt;p&gt;Hetzelfde patroon — een &lt;code&gt;package.json&lt;/code&gt; bij het script en &lt;code&gt;azd&lt;/code&gt; voert eerst &lt;code&gt;npm install&lt;/code&gt; uit. Voor TypeScript wordt &lt;code&gt;npx tsx&lt;/code&gt; gebruikt, zonder compilatiestap en zonder &lt;code&gt;tsconfig.json&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="net"&gt;.NET&lt;/h3&gt;
&lt;p&gt;Twee beschikbare modi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Projectmodus&lt;/strong&gt;: Als er een &lt;code&gt;.csproj&lt;/code&gt; naast het script staat, voert &lt;code&gt;azd&lt;/code&gt; automatisch &lt;code&gt;dotnet restore&lt;/code&gt; en &lt;code&gt;dotnet build&lt;/code&gt; uit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Single-file modus&lt;/strong&gt;: Op .NET 10+ kunnen zelfstandige &lt;code&gt;.cs&lt;/code&gt;-bestanden direct worden uitgevoerd via &lt;code&gt;dotnet run script.cs&lt;/code&gt;. Geen projectbestand vereist.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="executor-specifieke-configuratie"&gt;Executor-specifieke configuratie&lt;/h2&gt;
&lt;p&gt;Elke taal ondersteunt een optioneel &lt;code&gt;config&lt;/code&gt;-blok:&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="waarom-dit-belangrijk-is-voor-net-ontwikkelaars"&gt;Waarom dit belangrijk is voor .NET-ontwikkelaars&lt;/h2&gt;
&lt;p&gt;Hooks waren de laatste plek in een azd-gebaseerd project die een taalwissel afdwong. Nu kan de volledige deployment pipeline — van applicatiecode tot lifecycle-hooks — in één taal leven. Bestaande .NET-utilities zijn herbruikbaar in hooks, gedeelde bibliotheken kunnen worden gerefereerd en shell-scriptonderhoud is verleden tijd.&lt;/p&gt;
&lt;h2 id="conclusie"&gt;Conclusie&lt;/h2&gt;
&lt;p&gt;Een van die veranderingen die klein lijken maar dagelijks veel wrijving uit de azd-workflow halen. Multi-taalondersteuning voor hooks is nu beschikbaar — bekijk de &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;officiële post&lt;/a&gt; voor de volledige documentatie.&lt;/p&gt;</content:encoded></item><item><title>Foundry Toolboxes: Eén endpoint voor alle tools van je AI-agenten</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/</guid><description>Microsoft Foundry heeft Toolboxes uitgebracht in public preview — een manier om AI-agenttools te beheren en bloot te stellen via één MCP-compatibel endpoint.</description><content:encoded>&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor de originele versie, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Er is een probleem dat triviaal lijkt totdat je het zelf tegenkomt: de organisatie bouwt meerdere AI-agenten, elk heeft tools nodig, en elk team configureert die van de grond af. Dezelfde webzoekintegratie, dezelfde Azure AI Search-configuratie, dezelfde GitHub MCP-serververbinding — maar in een ander repository, door een ander team, met andere credentials en zonder gedeeld beheer.&lt;/p&gt;
&lt;p&gt;Microsoft Foundry heeft zojuist &lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;Toolboxes&lt;/a&gt; uitgebracht in public preview — een directe oplossing voor dit probleem.&lt;/p&gt;
&lt;h2 id="wat-is-een-toolbox"&gt;Wat is een Toolbox?&lt;/h2&gt;
&lt;p&gt;Een Toolbox is een benoemde, herbruikbare toolbundel die je eenmalig definieert in Foundry en beschikbaar stelt via één MCP-compatibel endpoint. Elke agent-runtime die MCP spreekt, kan het consumeren — geen lock-in bij Foundry Agents.&lt;/p&gt;
&lt;p&gt;De belofte is eenvoudig: &lt;strong&gt;build once, consume anywhere&lt;/strong&gt;. Definieer de tools, configureer authenticatie centraal (OAuth passthrough, Entra beheerde identiteit), publiceer het endpoint. Elke agent die die tools nodig heeft, verbindt zich eenmalig en krijgt ze allemaal.&lt;/p&gt;
&lt;h2 id="de-vier-pijlers-twee-vandaag-beschikbaar"&gt;De vier pijlers (twee vandaag beschikbaar)&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pijler&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Wat het doet&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Discover&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Binnenkort&lt;/td&gt;
&lt;td&gt;Goedgekeurde tools vinden zonder handmatig zoeken&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Build&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Beschikbaar&lt;/td&gt;
&lt;td&gt;Tools samenvoegen in een herbruikbare bundel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Consume&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Beschikbaar&lt;/td&gt;
&lt;td&gt;Één MCP-endpoint stelt alle tools beschikbaar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Govern&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Binnenkort&lt;/td&gt;
&lt;td&gt;Centrale authenticatie + observability voor alle tool-calls&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="praktisch-voorbeeld"&gt;Praktisch voorbeeld&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.identity&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.projects&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;FOUNDRY_PROJECT_ENDPOINT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;toolbox_version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;toolboxes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_toolbox_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;toolbox_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;customer-feedback-triaging-toolbox&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Zoek in documentatie en reageer op GitHub-issues.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;web_search&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Zoek openbare documentatie&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;azure_ai_search&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;index_name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;internal-docs&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;mcp_server&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;server_url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://your-github-mcp-server.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Na publicatie geeft Foundry een uniform endpoint. Één verbinding, alle tools.&lt;/p&gt;
&lt;h2 id="geen-lock-in-bij-foundry-agents"&gt;Geen lock-in bij Foundry Agents&lt;/h2&gt;
&lt;p&gt;Toolboxes worden &lt;strong&gt;aangemaakt en beheerd&lt;/strong&gt; in Foundry, maar het consumptieoppervlak is het open MCP-protocol. Ze zijn bruikbaar vanuit eigen agents (Microsoft Agent Framework, LangGraph), GitHub Copilot en andere MCP-compatibele IDEs.&lt;/p&gt;
&lt;h2 id="waarom-dit-nu-belangrijk-is"&gt;Waarom dit nu belangrijk is&lt;/h2&gt;
&lt;p&gt;De multi-agent golf bereikt productie. Elke nieuwe agent is een nieuw oppervlak voor gedupliceerde configuratie, verlopen credentials en inconsistent gedrag. De Build + Consume-basis is voldoende om met centraliseren te beginnen. Wanneer de Govern-pijler komt, beschikt men over een volledig observeerbare, centraal gestuurde tool-laag voor de gehele agentenvloot.&lt;/p&gt;
&lt;h2 id="conclusie"&gt;Conclusie&lt;/h2&gt;
&lt;p&gt;Dit is nog vroeg — public preview, Python SDK eerst, met Discover en Govern nog in aantocht. Maar het model is degelijk en het MCP-native design zorgt dat het werkt met de tools die al worden gebouwd. Alle details in de &lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;officiële aankondiging&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Windows App Dev CLI v0.3: F5 vanuit de terminal en UI Automation voor agenten</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/</guid><description>Windows App Development CLI v0.3 brengt winapp run voor debug-launches vanuit de terminal, winapp ui voor UI-automatisering en een nieuw NuGet-pakket dat dotnet run laat werken met gepackagede apps.</description><content:encoded>&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor de originele versie, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;De F5-ervaring in Visual Studio is fantastisch. Maar VS openen alleen om een gepackagede Windows-app te starten en te debuggen — of dat nu in een CI-pipeline is, een geautomatiseerde workflow, of wanneer een AI-agent de tests uitvoert — is te veel gevraagd.&lt;/p&gt;
&lt;p&gt;Windows App Development CLI v0.3 is &lt;a href="https://devblogs.microsoft.com/ifdef-windows/windows-app-development-cli-v0-3-new-run-and-ui-commands-plus-dotnet-run-support-for-packaged-apps/"&gt;net uitgekomen&lt;/a&gt; en pakt dit direct aan met twee hoofdfuncties: &lt;code&gt;winapp run&lt;/code&gt; en &lt;code&gt;winapp ui&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="winapp-run-f5-vanuit-overal"&gt;winapp run: F5 vanuit overal&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;winapp run&lt;/code&gt; neemt een ongepackagede app-map en een manifest, en doet alles wat VS doet bij een debug-launch: registreert een loose package, start de app op en bewaart de &lt;code&gt;LocalState&lt;/code&gt; tussen re-deploys.&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;&lt;span class="c1"&gt;# Bouw de app, voer hem dan uit als gepackagede app&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;winapp run ./bin/Debug
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Werkt voor WinUI, WPF, WinForms, Console, Avalonia en meer. De modi zijn ontworpen voor zowel developers als geautomatiseerde workflows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--detach&lt;/code&gt;&lt;/strong&gt;: Start op en geeft meteen de controle terug aan de terminal. Perfect voor CI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--unregister-on-exit&lt;/code&gt;&lt;/strong&gt;: Ruimt het geregistreerde package op bij het sluiten van de app.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--debug-output&lt;/code&gt;&lt;/strong&gt;: Legt &lt;code&gt;OutputDebugString&lt;/code&gt;-berichten en uitzonderingen real-time vast.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="nieuw-nuget-pakket-dotnet-run-voor-gepackagede-apps"&gt;Nieuw NuGet-pakket: dotnet run voor gepackagede apps&lt;/h2&gt;
&lt;p&gt;Voor .NET-developers is er een nieuw NuGet-pakket: &lt;code&gt;Microsoft.Windows.SDK.BuildTools.WinApp&lt;/code&gt;. Na installatie beheert &lt;code&gt;dotnet run&lt;/code&gt; de gehele inner loop: bouwen, een loose-layout package voorbereiden, registreren bij Windows en starten — alles in één stap.&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;winapp init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet add package Microsoft.Windows.SDK.BuildTools.WinApp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="winapp-ui-ui-automation-vanuit-de-commandoregel"&gt;winapp ui: UI Automation vanuit de commandoregel&lt;/h2&gt;
&lt;p&gt;Dit is de functie die agentische scenario&amp;rsquo;s mogelijk maakt. &lt;code&gt;winapp ui&lt;/code&gt; biedt volledige UI Automation-toegang tot elke actieve Windows-app — WPF, WinForms, Win32, Electron, WinUI3 — direct vanuit de terminal.&lt;/p&gt;
&lt;p&gt;Wat mogelijk is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Alle vensters op het hoogste niveau weergeven&lt;/li&gt;
&lt;li&gt;De volledige UI Automation-boom van een venster doorlopen&lt;/li&gt;
&lt;li&gt;Elementen zoeken op naam, type of automatiserings-ID&lt;/li&gt;
&lt;li&gt;Klikken, aanroepen en waarden instellen&lt;/li&gt;
&lt;li&gt;Screenshots maken&lt;/li&gt;
&lt;li&gt;Wachten op het verschijnen van elementen — ideaal voor testsynchronisatie&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;winapp ui&lt;/code&gt; combineren met &lt;code&gt;winapp run&lt;/code&gt; geeft een complete build → starten → verifiëren workflow vanuit de terminal. Een agent kan de app uitvoeren, de UI-status inspecteren, programmatisch interageren en het resultaat valideren.&lt;/p&gt;
&lt;h2 id="andere-nieuwigheden"&gt;Andere nieuwigheden&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp unregister&lt;/code&gt;&lt;/strong&gt;: Verwijdert een sideloaded package na gebruik.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp manifest add-alias&lt;/code&gt;&lt;/strong&gt;: Voegt een alias toe om de app op naam te starten vanuit de terminal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tab-aanvulling&lt;/strong&gt;: Configureer PowerShell-aanvulling met één commando.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="hoe-te-verkrijgen"&gt;Hoe te verkrijgen&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;winget install Microsoft.WinAppCli
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install -g @microsoft/winappcli
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;De CLI is in publieke preview. Bekijk de &lt;a href="https://github.com/microsoft/WinAppCli"&gt;GitHub-repository&lt;/a&gt; voor volledige documentatie en de &lt;a href="https://devblogs.microsoft.com/ifdef-windows/windows-app-development-cli-v0-3-new-run-and-ui-commands-plus-dotnet-run-support-for-packaged-apps/"&gt;originele aankondiging&lt;/a&gt; voor alle details.&lt;/p&gt;</content:encoded></item><item><title>azd + GitHub Copilot: AI-gedreven projectopzet en slimme foutoplossing</title><link>https://thedotnetblog.com/nl/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/nl/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</guid><description>De Azure Developer CLI integreert nu met GitHub Copilot om projectinfrastructuur te genereren en deployment-fouten op te lossen — zonder de terminal te verlaten.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit artikel is automatisch vertaald. Voor de originele Engelse versie, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ken je dat moment waarop je een bestaande app naar Azure wilt deployen en je naar een lege &lt;code&gt;azure.yaml&lt;/code&gt; staart, terwijl je probeert te herinneren of je Express API Container Apps of App Service moet gebruiken? Dat moment is zojuist een stuk korter geworden.&lt;/p&gt;
&lt;p&gt;De Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) integreert nu met GitHub Copilot op twee concrete manieren: AI-ondersteunde projectscaffolding tijdens &lt;code&gt;azd init&lt;/code&gt;, en intelligente foutoplossing wanneer deployments mislukken. Beide functies blijven volledig in de terminal.&lt;/p&gt;
&lt;h2 id="setup-met-copilot-tijdens-azd-init"&gt;Setup met Copilot tijdens azd init&lt;/h2&gt;
&lt;p&gt;Wanneer je &lt;code&gt;azd init&lt;/code&gt; uitvoert, is er nu een optie &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo;. Selecteer die en Copilot analyseert je codebase om de &lt;code&gt;azure.yaml&lt;/code&gt;, infrastructuursjablonen en Bicep-modules te genereren — gebaseerd op je echte code.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd init
# Selecteer: &amp;#34;Set up with GitHub Copilot (Preview)&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Vereisten:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;azd 1.23.11 of nieuwer&lt;/strong&gt; — controleer met &lt;code&gt;azd version&lt;/code&gt; of update met &lt;code&gt;azd update&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Actief GitHub Copilot-abonnement&lt;/strong&gt; (Individual, Business of 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; vraagt om login als dat nodig is&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wat ik echt nuttig vind: het werkt in beide richtingen. Bouw je van de grond af? Copilot helpt je de juiste Azure-services vanaf het begin te configureren. Heb je een bestaande app die je wilt deployen? Wijs Copilot daarop en het genereert de configuratie zonder dat je iets hoeft te herstructureren.&lt;/p&gt;
&lt;h3 id="wat-het-eigenlijk-doet"&gt;Wat het eigenlijk doet&lt;/h3&gt;
&lt;p&gt;Stel je hebt een Node.js Express API met een PostgreSQL-afhankelijkheid. In plaats van handmatig te kiezen tussen Container Apps en App Service en dan Bicep van de grond af te schrijven, detecteert Copilot je stack en genereert:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Een &lt;code&gt;azure.yaml&lt;/code&gt; met de juiste &lt;code&gt;language&lt;/code&gt;-, &lt;code&gt;host&lt;/code&gt;- en &lt;code&gt;build&lt;/code&gt;-instellingen&lt;/li&gt;
&lt;li&gt;Een Bicep-module voor Azure Container Apps&lt;/li&gt;
&lt;li&gt;Een Bicep-module voor Azure Database for PostgreSQL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En het voert voorafgaande controles uit voor wijzigingen — verifieert dat je git-werkdirectory schoon is, vraagt van tevoren toestemming voor MCP-servertools. Niets gebeurt zonder dat je precies weet wat er gaat veranderen.&lt;/p&gt;
&lt;h2 id="foutoplossing-met-copilot"&gt;Foutoplossing met Copilot&lt;/h2&gt;
&lt;p&gt;Deployment-fouten zijn onvermijdelijk. Ontbrekende parameters, toestemmingsproblemen, SKU-beschikbaarheid — en het foutbericht vertelt je zelden het enige dat je echt moet weten: &lt;em&gt;hoe je het oplost&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Zonder Copilot ziet de lus er zo uit: kopieer de fout → zoek in docs → lees drie irrelevante Stack Overflow-antwoorden → voer wat &lt;code&gt;az&lt;/code&gt; CLI-opdrachten uit → probeer opnieuw en hoop. Met Copilot geïntegreerd in &lt;code&gt;azd&lt;/code&gt; stort deze lus in. Wanneer een &lt;code&gt;azd&lt;/code&gt;-opdracht mislukt, biedt het onmiddellijk vier opties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Explain&lt;/strong&gt; — uitleg in begrijpelijke taal van wat er mis ging&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guidance&lt;/strong&gt; — stapsgewijze instructies om het probleem op te lossen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diagnose and Guide&lt;/strong&gt; — volledige analyse + Copilot past de oplossing toe (met jouw goedkeuring) + optioneel opnieuw proberen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip&lt;/strong&gt; — zelf afhandelen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Het cruciale punt: Copilot heeft al context over je project, de mislukte opdracht en de foutdetails. Zijn suggesties zijn specifiek voor &lt;em&gt;jouw situatie&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id="een-standaardgedrag-instellen"&gt;Een standaardgedrag instellen&lt;/h3&gt;
&lt;p&gt;Als je altijd dezelfde optie kiest, sla de interactieve prompt over:&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;Waarden: &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;. Je kunt ook automatisch herstellen en opnieuw proberen inschakelen:&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;Op elk moment terug naar de interactieve modus:&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="samenvatting"&gt;Samenvatting&lt;/h2&gt;
&lt;p&gt;Voer &lt;code&gt;azd update&lt;/code&gt; uit voor de nieuwste versie en probeer &lt;code&gt;azd init&lt;/code&gt; op je volgende project.&lt;/p&gt;
&lt;p&gt;Lees de &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-copilot-integration/"&gt;originele aankondiging hier&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Native Node.js-addons schrijven in C# met .NET Native AOT</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/nodejs-addons-csharp-native-aot/</link><pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/nodejs-addons-csharp-native-aot/</guid><description>Het C# Dev Kit-team verving C++ Node.js-addons door .NET Native AOT — het resultaat is schoner, veiliger en heeft alleen de .NET SDK nodig.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit artikel is automatisch vertaald. Voor de originele Engelse versie, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/nodejs-addons-csharp-native-aot/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hier is een scenario dat ik geweldig vind: een team dat werkt aan .NET-tooling had native Node.js-addons geschreven in C++ en gecompileerd via &lt;code&gt;node-gyp&lt;/code&gt;. Het werkte. Maar het vereiste Python op elke machine van een ontwikkelaar — een oude versie van Python, let wel — alleen om een pakket te compileren dat niemand in het team ooit rechtstreeks zou aanraken.&lt;/p&gt;
&lt;p&gt;Dus stelden ze een heel redelijke vraag: we hebben de .NET SDK al geïnstalleerd, waarom schrijven we überhaupt C++?&lt;/p&gt;
&lt;p&gt;Het antwoord was Native AOT, en het resultaat is oprecht elegant. Drew Noakes van het C# Dev Kit-team schreef op hoe ze het aanpakten.&lt;/p&gt;
&lt;h2 id="het-basisidee"&gt;Het basisidee&lt;/h2&gt;
&lt;p&gt;Een native Node.js-addon is een gedeelde bibliotheek (&lt;code&gt;.dll&lt;/code&gt; op Windows, &lt;code&gt;.so&lt;/code&gt; op Linux, &lt;code&gt;.dylib&lt;/code&gt; op macOS) die Node.js tijdens runtime kan laden. De interface heet &lt;a href="https://nodejs.org/api/n-api.html"&gt;N-API&lt;/a&gt; — een stabiele, ABI-compatibele C API. N-API maakt niet uit welke taal de bibliotheek heeft geproduceerd, alleen dat die de juiste symbolen exporteert.&lt;/p&gt;
&lt;p&gt;.NET Native AOT kan precies dat produceren. Het compileert je C#-code ahead-of-time naar een native gedeelde bibliotheek met willekeurige invoerpunten.&lt;/p&gt;
&lt;h2 id="de-projectconfiguratie"&gt;De projectconfiguratie&lt;/h2&gt;
&lt;p&gt;Het projectbestand is minimaal:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;Project&lt;/span&gt; &lt;span class="na"&gt;Sdk=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Microsoft.NET.Sdk&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;PropertyGroup&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;TargetFramework&amp;gt;&lt;/span&gt;net10.0&lt;span class="nt"&gt;&amp;lt;/TargetFramework&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;PublishAot&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/PublishAot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;AllowUnsafeBlocks&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/AllowUnsafeBlocks&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/Project&amp;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;PublishAot&lt;/code&gt; vertelt de SDK om een gedeelde bibliotheek te produceren bij &lt;code&gt;dotnet publish&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="het-invoerpunt-exporteren"&gt;Het invoerpunt exporteren&lt;/h2&gt;
&lt;p&gt;Node.js verwacht dat jouw bibliotheek &lt;code&gt;napi_register_module_v1&lt;/code&gt; exporteert. In C# doet &lt;code&gt;[UnmanagedCallersOnly]&lt;/code&gt; precies dat:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;[UnmanagedCallersOnly(
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; EntryPoint = &amp;#34;napi_register_module_v1&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; CallConvs = [typeof(CallConvCdecl)]&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="n"&gt;nint&lt;/span&gt; &lt;span class="n"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nint&lt;/span&gt; &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nint&lt;/span&gt; &lt;span class="n"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Initialize&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;RegisterFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;readStringValue&amp;#34;&lt;/span&gt;&lt;span class="n"&gt;u8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ReadStringValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Het &lt;code&gt;u8&lt;/code&gt;-achtervoegsel produceert een &lt;code&gt;ReadOnlySpan&amp;lt;byte&amp;gt;&lt;/code&gt; met een UTF-8 string-literal, rechtstreeks doorgegeven aan N-API zonder enige coderingstoewijzing.&lt;/p&gt;
&lt;h2 id="n-api-oplossen-tegen-het-hostproces"&gt;N-API oplossen tegen het hostproces&lt;/h2&gt;
&lt;p&gt;N-API-functies worden geëxporteerd door &lt;code&gt;node.exe&lt;/code&gt; zelf, niet door een aparte bibliotheek. Dus in plaats van ergens tegen te linken, los je ze op tegen het actieve proces bij opstarten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NativeLibrary&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SetDllImportResolver&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Reflection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Assembly&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetExecutingAssembly&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ResolveDllImport&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Daarmee werken P/Invoke-declaraties netjes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;[LibraryImport(&amp;#34;node&amp;#34;, EntryPoint = &amp;#34;napi_create_string_utf8&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;internal&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;partial&lt;/span&gt; &lt;span class="n"&gt;Status&lt;/span&gt; &lt;span class="n"&gt;CreateStringUtf8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;nint&lt;/span&gt; &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ReadOnlySpan&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nuint&lt;/span&gt; &lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;out&lt;/span&gt; &lt;span class="n"&gt;nint&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="aanroepen-vanuit-typescript"&gt;Aanroepen vanuit TypeScript&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;dotnet publish&lt;/code&gt; produceert jouw platformspecifieke native bibliotheek. Hernoem het naar &lt;code&gt;.node&lt;/code&gt; en gebruik het met een standaard &lt;code&gt;require()&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;registry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;./native/win32-x64/RegistryAddon.node&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;RegistryAddon&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sdkPath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readStringValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;SOFTWARE\\dotnet\\Setup\\InstalledVersions\\x64\\sdk&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;InstallLocation&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dat is het. TypeScript naar C#, geen Python, geen C++.&lt;/p&gt;
&lt;h2 id="samenvatting"&gt;Samenvatting&lt;/h2&gt;
&lt;p&gt;Het C# Dev Kit-team verving de overhead van Python/C++ door schone C#-code die iedereen in het team al weet hoe te schrijven en debuggen. Het patroon is niet ingewikkeld zodra je het ziet, en het is een geweldig voorbeeld van Native AOT die een echt probleem oplost dat niet genoeg wordt besproken.&lt;/p&gt;
&lt;p&gt;Lees de &lt;a href="https://devblogs.microsoft.com/dotnet/writing-nodejs-addons-with-dotnet-native-aot/"&gt;originele blogpost op het .NET-blog&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.117: Agenten Krijgen Hun Eigen Git-branches en Ik Ben Er Helemaal Voor</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/vscode-1-117-agents-autopilot-worktrees/</link><pubDate>Sun, 19 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/vscode-1-117-agents-autopilot-worktrees/</guid><description>VS Code 1.117 brengt worktree-isolatie voor agentsessies, persistente Autopilot-modus en subagentondersteuning. De agentische coderingworkflow is een stuk reëler geworden.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/vscode-1-117-agents-autopilot-worktrees/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;De grens tussen &amp;ldquo;AI-assistent&amp;rdquo; en &amp;ldquo;AI-teamlid&amp;rdquo; wordt steeds dunner. VS Code 1.117 is zojuist geland en de &lt;a href="https://code.visualstudio.com/updates/v1_117"&gt;volledige releasenotes&lt;/a&gt; zijn gevuld, maar het verhaal is duidelijk: agenten worden eerste klas burgers in je workflow.&lt;/p&gt;
&lt;p&gt;Dit is wat er echt toe doet.&lt;/p&gt;
&lt;h2 id="autopilot-modus-onthoudt-eindelijk-je-voorkeur"&gt;Autopilot-modus onthoudt eindelijk je voorkeur&lt;/h2&gt;
&lt;p&gt;Eerder moest je Autopilot opnieuw inschakelen elke keer dat je een nieuwe sessie startte. Vervelend. Nu blijft je machtigingsmodus bewaard tussen sessies, en je kunt de standaard instellen.&lt;/p&gt;
&lt;p&gt;De Agent Host ondersteunt drie sessieconfiguraties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default&lt;/strong&gt; — tools vragen om bevestiging voordat ze worden uitgevoerd&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bypass&lt;/strong&gt; — keurt alles automatisch goed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autopilot&lt;/strong&gt; — volledig autonoom, beantwoordt zijn eigen vragen en gaat door&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Als je een nieuw .NET-project scaffoldt met migraties, Docker en CI — stel het eén keer in op Autopilot en vergeet het. Die voorkeur blijft.&lt;/p&gt;
&lt;h2 id="worktree--en-git-isolatie-voor-agentsessies"&gt;Worktree- en git-isolatie voor agentsessies&lt;/h2&gt;
&lt;p&gt;Dit is de grote. Agentsessies ondersteunen nu volledige worktree- en git-isolatie. Dat betekent dat wanneer een agent aan een taak werkt, het zijn eigen branch en werkmap krijgt. Je hoofdbranch blijft onaangetast.&lt;/p&gt;
&lt;p&gt;Nog beter — Copilot CLI genereert betekenisvolle branchnamen voor deze worktree-sessies. Geen &lt;code&gt;agent-session-abc123&lt;/code&gt; meer. Je krijgt iets dat daadwerkelijk beschrijft wat de agent doet.&lt;/p&gt;
&lt;p&gt;Voor .NET-ontwikkelaars die meerdere feature-branches uitvoeren of bugs oplossen terwijl een lange scaffoldingtaak loopt, is dit een game changer.&lt;/p&gt;
&lt;h2 id="subagenten-en-agentteams"&gt;Subagenten en agentteams&lt;/h2&gt;
&lt;p&gt;Het Agent Host Protocol ondersteunt nu subagenten. Een agent kan andere agenten starten om delen van een taak te verwerken. De hoofdagent coördineert en gespecialiseerde agenten verwerken de stukken.&lt;/p&gt;
&lt;h2 id="terminaluitvoer-automatisch-inbegrepen-wanneer-agenten-invoer-sturen"&gt;Terminaluitvoer automatisch inbegrepen wanneer agenten invoer sturen&lt;/h2&gt;
&lt;p&gt;Klein maar betekenisvol. Wanneer een agent invoer naar de terminal stuurt, wordt de terminaluitvoer nu automatisch opgenomen in de context. Als je ooit een agent &lt;code&gt;dotnet build&lt;/code&gt; hebt zien uitvoeren, zien mislukken en dan nog een ronde nodig had alleen om de fout te zien — die wrijving is weg.&lt;/p&gt;
&lt;h2 id="zelfupdatende-agents-app-op-macos"&gt;Zelfupdatende Agents-app op macOS&lt;/h2&gt;
&lt;p&gt;De standalone Agents-app op macOS werkt zichzelf nu automatisch bij. Geen handmatig downloaden van nieuwe versies meer.&lt;/p&gt;
&lt;h2 id="de-conclusie"&gt;De conclusie&lt;/h2&gt;
&lt;p&gt;VS Code 1.117 is infrastructuur. Worktree-isolatie, persistente machtigingen, subagentprotocollen — dit zijn de bouwstenen voor een workflow waarbij agenten echte, parallelle taken uitvoeren zonder je code aan te raken. Als je met .NET bouwt en je nog niet in de agentische workflow hebt verdiept, is dit eerlijk gezegd het moment om te beginnen.&lt;/p&gt;</content:encoded></item><item><title>Foundry RFT Is Goedkoper en Slimmer Geworden — Dit Is Wat Er Veranderd Is</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/</guid><description>Microsoft Foundry stuurde deze maand drie RFT-updates: globale training voor o4-mini, nieuwe GPT-4.1-modelbeoordelaars en een best practices-gids.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Als je .NET-apps bouwt die op fijnafgestelde modellen vertrouwen, zijn de Foundry-updates van deze maand de moeite waard.&lt;/p&gt;
&lt;p&gt;De volledige details staan in de &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-foundry-finetune-april-2026/"&gt;officiële aankondiging&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="globale-training-voor-o4-mini"&gt;Globale training voor o4-mini&lt;/h2&gt;
&lt;p&gt;o4-mini is het go-to-model voor redeneerwerk en agentische workloads. Je kunt nu fine-tuning-taken starten vanuit 13+ Azure-regio&amp;rsquo;s met lagere per-token-trainingstarieven.&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;&lt;span class="s2"&gt;&amp;#34;trainingType&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;globalstandard&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="nieuwe-modelbeoordelaars-gpt-41-familie"&gt;Nieuwe modelbeoordelaars: GPT-4.1-familie&lt;/h2&gt;
&lt;p&gt;Drie nieuwe opties: GPT-4.1, GPT-4.1-mini en GPT-4.1-nano.&lt;/p&gt;
&lt;p&gt;Indelingsstrategie:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1-nano&lt;/strong&gt; voor eerste iteraties. Lage kosten, snelle feedbacklussen.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1-mini&lt;/strong&gt; zodra de beoordelingsrubric stabiel is.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1&lt;/strong&gt; voor productiebeoordeling.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="de-rft-gegevensformaatval"&gt;De RFT-gegevensformaatval&lt;/h2&gt;
&lt;p&gt;RFT-gegevensformaat verschilt van SFT. Het laatste bericht in elke rij moet de rol User of Developer hebben — niet Assistant.&lt;/p&gt;
&lt;h2 id="waarom-dit-belangrijk-is-voor-net-ontwikkelaars"&gt;Waarom dit belangrijk is voor .NET-ontwikkelaars&lt;/h2&gt;
&lt;p&gt;Goedkopere training betekent agressiever kunnen itereren. De &lt;a href="https://github.com/microsoft-foundry/fine-tuning/blob/main/Demos/Agentic_RFT_PrivatePreview/RFT_Best_Practice.md"&gt;best practices-gids op GitHub&lt;/a&gt; bespaart echte debugging-tijd.&lt;/p&gt;</content:encoded></item><item><title>Je AI-experimenten op Azure Verbranden Geld — Hier is Hoe je Dat Oplost</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/</guid><description>AI-workloads op Azure kunnen snel duur worden. Laten we het hebben over wat echt werkt om kosten onder controle te houden zonder je ontwikkeling te vertragen.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Als je momenteel AI-aangedreven apps bouwt op Azure, heb je waarschijnlijk iets opgemerkt: je cloudfactuur ziet er anders uit. Niet alleen hoger — vreemder. Grillig. Moeilijk te voorspellen.&lt;/p&gt;
&lt;p&gt;Microsoft heeft zojuist een geweldig stuk gepubliceerd over &lt;a href="https://azure.microsoft.com/en-us/blog/cloud-cost-optimization-principles-that-still-matter/"&gt;cloud cost optimization-principes die nog steeds relevant zijn&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="waarom-ai-workloads-anders-zijn"&gt;Waarom AI-workloads anders zijn&lt;/h2&gt;
&lt;p&gt;Traditionele .NET-workloads zijn relatief voorspelbaar. AI-workloads? Niet echt. Je test meerdere modellen, draait GPU-infrastructuur op, en maakt API-aanroepen naar Azure OpenAI waarbij tokenverbruik enorm varieert.&lt;/p&gt;
&lt;h2 id="beheer-vs-optimalisatie--ken-het-verschil"&gt;Beheer vs. optimalisatie — ken het verschil&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Beheer&lt;/strong&gt;: bijhouden en rapporteren.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimalisatie&lt;/strong&gt;: daadwerkelijk beslissingen nemen. Heb je echt die S3-laag nodig? Zit die altijd-aan instantie in het weekend te niets doen?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="wat-echt-werkt"&gt;Wat echt werkt&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tag je resources&lt;/strong&gt; — als je niet kunt zien welk project je budget opeet, kun je niets optimaliseren&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stel vangrails in vóór experimenten&lt;/strong&gt; — gebruik Azure Policy om dure SKU&amp;rsquo;s te beperken&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pas de grootte voortdurend aan&lt;/strong&gt; — bekijk aanbevelingen van Azure Advisor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Denk aan de levenscyclus&lt;/strong&gt; — dev-resources moeten worden afgesloten&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Meet waarde, niet alleen kosten&lt;/strong&gt; — een duurder model dat significant betere resultaten levert, kan de juiste keuze zijn&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Docker Sandbox Laat Copilot-agents Code Refactoren Zonder Je Machine te Riskeren</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/copilot-docker-sandbox-agentic-refactoring/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/copilot-docker-sandbox-agentic-refactoring/</guid><description>Docker Sandbox geeft GitHub Copilot-agents een veilige microVM om vrij te refactoren — geen toestemmingsprompts, geen risico voor de host. Dit is waarom het alles verandert voor grootschalige .NET-modernisering.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/copilot-docker-sandbox-agentic-refactoring/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Als je Copilots agentmodus hebt gebruikt voor iets meer dan kleine bewerkingen, ken je de pijn. Elke bestandsschrijfoperatie, elk terminalopdracht — weer een toestemmingsprompt.&lt;/p&gt;
&lt;p&gt;Het Azure-team heeft zojuist een bericht gepubliceerd over &lt;a href="https://devblogs.microsoft.com/all-things-azure/best-of-both-worlds-for-agentic-refactoring-github-copilot-microvms-via-docker-sandbox/"&gt;Docker Sandbox voor GitHub Copilot-agents&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="wat-docker-sandbox-je-eigenlijk-geeft"&gt;Wat Docker Sandbox je eigenlijk geeft&lt;/h2&gt;
&lt;p&gt;Het basisidee is eenvoudig: een lichtgewicht microVM opstarten met een volledige Linux-omgeving, je werkruimte erin synchroniseren, en de Copilot-agent vrij laten opereren binnenin.&lt;/p&gt;
&lt;p&gt;Dit is meer dan &amp;ldquo;dingen in een container draaien&amp;rdquo;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bidirectionele werkruimtesynchronisatie&lt;/strong&gt; die absolute paden behoudt&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privé Docker-daemon&lt;/strong&gt; die in de microVM draait&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTP/HTTPS-filterproxy&amp;rsquo;s&lt;/strong&gt; die netwerktoegang beheren&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;YOLO-modus&lt;/strong&gt; — de agent draait zonder toestemmingsprompts&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="waarom-net-ontwikkelaars-dit-moeten-bijhouden"&gt;Waarom .NET-ontwikkelaars dit moeten bijhouden&lt;/h2&gt;
&lt;p&gt;Met Docker Sandbox kun je een Copilot-agent op een project richten, het vrijelijk laten refactoren in de microVM, &lt;code&gt;dotnet build&lt;/code&gt; en &lt;code&gt;dotnet test&lt;/code&gt; uitvoeren om te valideren, en alleen wijzigingen accepteren die daadwerkelijk werken.&lt;/p&gt;
&lt;h2 id="conclusie"&gt;Conclusie&lt;/h2&gt;
&lt;p&gt;Docker Sandbox lost de fundamentele spanning van agentic coding op: agents hebben vrijheid nodig om nuttig te zijn, maar vrijheid op je host-machine is gevaarlijk. MicroVM&amp;rsquo;s geven je allebei.&lt;/p&gt;</content:encoded></item><item><title>Stop met het Bewaken van je Terminal: Aspire's Losstaande Modus Verandert de Workflow</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/</guid><description>Aspire 13.2 laat je AppHost op de achtergrond uitvoeren en je terminal terugkrijgen. Gecombineerd met nieuwe CLI-opdrachten en agentondersteuning is dit een grotere deal dan het klinkt.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Elke keer dat je een Aspire AppHost uitvoert, is je terminal weg. Vergrendeld. Bezet totdat je Ctrl+C uitvoert. Wil je een snel commando uitvoeren? Open een nieuw tabblad. Logs controleren? Nog een tabblad. Deze kleine wrijving telt snel op.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 lost dit op. James Newton-King &lt;a href="https://devblogs.microsoft.com/aspire/aspire-detached-mode-and-process-management/"&gt;heeft alle details opgeschreven&lt;/a&gt;, en eerlijk gezegd is dit een van die functies die onmiddellijk veranderen hoe je werkt.&lt;/p&gt;
&lt;h2 id="losstaande-modus-één-commando-terminal-terug"&gt;Losstaande modus: één commando, terminal terug&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;aspire start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dit is de afkorting voor &lt;code&gt;aspire run --detach&lt;/code&gt;. Je AppHost start op de achtergrond en je krijgt je terminal onmiddellijk terug.&lt;/p&gt;
&lt;h2 id="beheren-wat-er-draait"&gt;Beheren wat er draait&lt;/h2&gt;
&lt;p&gt;Op de achtergrond draaien is alleen nuttig als je daadwerkelijk kunt beheren wat er draait. Aspire 13.2 levert een volledige set CLI-opdrachten:&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;&lt;span class="c1"&gt;# Lijst alle draaiende AppHosts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire ps
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Inspecteer de status van een specifieke AppHost&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire describe
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Stream logs van een draaiende AppHost&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire logs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Stop een specifieke AppHost&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire stop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="combineer-het-met-de-geïsoleerde-modus"&gt;Combineer het met de geïsoleerde modus&lt;/h2&gt;
&lt;p&gt;De losstaande modus combineert natuurlijk met de geïsoleerde modus:&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;aspire start --isolated
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire start --isolated
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Elke instantie krijgt willekeurige poorten, afzonderlijke geheimen en zijn eigen levenscyclus.&lt;/p&gt;
&lt;h2 id="waarom-dit-groot-is-voor-coding-agents"&gt;Waarom dit groot is voor coding agents&lt;/h2&gt;
&lt;p&gt;Een coding agent die in je terminal werkt, kan nu:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;De app starten met &lt;code&gt;aspire start&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;De status opvragen met &lt;code&gt;aspire describe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Logs controleren met &lt;code&gt;aspire logs&lt;/code&gt; om problemen te diagnosticeren&lt;/li&gt;
&lt;li&gt;Stoppen met &lt;code&gt;aspire stop&lt;/code&gt; als klaar&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;aspire agent init&lt;/code&gt; uitvoeren stelt een Aspire-vaardigheidsbestand in dat agents deze opdrachten leert.&lt;/p&gt;
&lt;h2 id="samenvatting"&gt;Samenvatting&lt;/h2&gt;
&lt;p&gt;De losstaande modus is een workflow-upgrade vermomd als een eenvoudige vlag. Lees de &lt;a href="https://devblogs.microsoft.com/aspire/aspire-detached-mode-and-process-management/"&gt;volledige post&lt;/a&gt; en haal Aspire 13.2 met &lt;code&gt;aspire update --self&lt;/code&gt;.&lt;/p&gt;</content:encoded></item><item><title>Azure MCP-tools zijn nu Ingebouwd in Visual Studio 2022 — Geen Extensie Nodig</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/</link><pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/</guid><description>Azure MCP-tools worden meegeleverd als onderdeel van de Azure-ontwikkelworkload in Visual Studio 2022. Meer dan 230 tools, 45 Azure-services, nul te installeren extensies.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Als je de Azure MCP-tools in Visual Studio hebt gebruikt via de afzonderlijke extensie, ken je de procedure — VSIX installeren, herstarten, hopen dat het niet stukgaat, versieverschillen beheren. Die wrijving is weg.&lt;/p&gt;
&lt;p&gt;Yun Jung Choi &lt;a href="https://devblogs.microsoft.com/visualstudio/azure-mcp-tools-now-ship-built-into-visual-studio-2022-no-extension-required/"&gt;kondigde aan&lt;/a&gt; dat Azure MCP-tools nu rechtstreeks worden meegeleverd als onderdeel van de Azure-ontwikkelworkload in Visual Studio 2022. Geen extensie. Geen VSIX.&lt;/p&gt;
&lt;h2 id="hoe-in-te-schakelen"&gt;Hoe in te schakelen&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Update naar Visual Studio 2022 &lt;strong&gt;17.14.30&lt;/strong&gt; of hoger&lt;/li&gt;
&lt;li&gt;Zorg ervoor dat de workload &lt;strong&gt;Azure development&lt;/strong&gt; is geïnstalleerd&lt;/li&gt;
&lt;li&gt;Open GitHub Copilot Chat&lt;/li&gt;
&lt;li&gt;Klik op de knop &lt;strong&gt;Tools selecteren&lt;/strong&gt; (het pictogram met twee moersleutels)&lt;/li&gt;
&lt;li&gt;Zet &lt;strong&gt;Azure MCP Server&lt;/strong&gt; aan&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Blijft ingeschakeld tussen sessies.&lt;/p&gt;
&lt;h2 id="kanttekening"&gt;Kanttekening&lt;/h2&gt;
&lt;p&gt;De tools zijn standaard uitgeschakeld — je moet ze inschakelen. Voor .NET-ontwikkelaars in Visual Studio verwijdert dit nog een reden om context te wisselen naar de Azure-portal.&lt;/p&gt;</content:encoded></item><item><title>Pin-clustering Landt Eindelijk in .NET MAUI Maps — Één Eigenschap, Nul Pijn</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/maui-maps-pin-clustering-finally/</link><pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/maui-maps-pin-clustering-finally/</guid><description>.NET MAUI 11 Preview 3 voegt native pin-clustering toe aan het Map-besturingselement. Één eigenschap, aparte clustergroepen en tikverwerking — allemaal ingebouwd.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/maui-maps-pin-clustering-finally/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ken je dat moment wanneer je een kaart laadt met honderd pins en alles een onleesbare klodder wordt? Dat was de .NET MAUI Maps-ervaring — tot nu.&lt;/p&gt;
&lt;p&gt;David Ortinau &lt;a href="https://devblogs.microsoft.com/dotnet/pin-clustering-in-dotnet-maui-maps/"&gt;heeft zojuist aangekondigd&lt;/a&gt; dat .NET MAUI 11 Preview 3 pin-clustering out-of-the-box levert op Android en iOS/Mac Catalyst.&lt;/p&gt;
&lt;h2 id="één-eigenschap-om-ze-allemaal-te-regeren"&gt;Één eigenschap om ze allemaal te regeren&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;maps:Map&lt;/span&gt; &lt;span class="na"&gt;IsClusteringEnabled=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;True&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dat is alles. Nabijgelegen pins worden gegroepeerd in clusters met een telling-badge.&lt;/p&gt;
&lt;h2 id="onafhankelijke-clustergroepen"&gt;Onafhankelijke clustergroepen&lt;/h2&gt;
&lt;p&gt;De &lt;code&gt;ClusteringIdentifier&lt;/code&gt;-eigenschap laat je pins scheiden in onafhankelijke groepen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Pin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Label&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Pike Place Coffee&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Location&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;47.6097&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="m"&gt;122.3331&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ClusteringIdentifier&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;coffee&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="clustertikken-afhandelen"&gt;Clustertikken afhandelen&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClusterClicked&lt;/span&gt; &lt;span class="p"&gt;+=&lt;/span&gt; &lt;span class="kd"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;\n&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Label&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;DisplayAlert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$&amp;#34;Cluster ({e.Pins.Count} pins)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;OK&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="aan-de-slag"&gt;Aan de slag&lt;/h2&gt;
&lt;p&gt;Installeer &lt;a href="https://dotnet.microsoft.com/download/dotnet/11.0"&gt;.NET 11 Preview 3&lt;/a&gt; en update de .NET MAUI-workload.&lt;/p&gt;</content:encoded></item><item><title>.NET April 2026 Servicing — Beveiligingspatches Die Je Vandaag Moet Toepassen</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/dotnet-april-2026-servicing-security-patches/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/dotnet-april-2026-servicing-security-patches/</guid><description>De servicing-release van april 2026 patcht 6 CVE's in .NET 10, .NET 9, .NET 8 en .NET Framework — inclusief twee kwetsbaarheden voor externe code-uitvoering.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/dotnet-april-2026-servicing-security-patches/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;De &lt;a href="https://devblogs.microsoft.com/dotnet/dotnet-and-dotnet-framework-april-2026-servicing-updates/"&gt;servicing-updates van april 2026&lt;/a&gt; voor .NET en .NET Framework zijn beschikbaar, en deze bevat beveiligingsfixes die je snel wilt toepassen. Zes CVE&amp;rsquo;s gepatcht, waaronder twee kwetsbaarheden voor externe code-uitvoering (RCE).&lt;/p&gt;
&lt;h2 id="wat-er-gepatcht-is"&gt;Wat er gepatcht is&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CVE&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Betreft&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2026-26171&lt;/td&gt;
&lt;td&gt;Beveiligingsfunctieomzeiling&lt;/td&gt;
&lt;td&gt;.NET 10, 9, 8 + .NET Framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2026-32178&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Externe code-uitvoering&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;.NET 10, 9, 8 + .NET Framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2026-33116&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Externe code-uitvoering&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;.NET 10, 9, 8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2026-32203&lt;/td&gt;
&lt;td&gt;Denial of service&lt;/td&gt;
&lt;td&gt;.NET 10, 9, 8 + .NET Framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2026-23666&lt;/td&gt;
&lt;td&gt;Denial of service&lt;/td&gt;
&lt;td&gt;.NET Framework 3.0–4.8.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2026-32226&lt;/td&gt;
&lt;td&gt;Denial of service&lt;/td&gt;
&lt;td&gt;.NET Framework 2.0–4.8.1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="bijgewerkte-versies"&gt;Bijgewerkte versies&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;.NET 10&lt;/strong&gt;: 10.0.6&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;.NET 9&lt;/strong&gt;: 9.0.15&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;.NET 8&lt;/strong&gt;: 8.0.26&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="wat-te-doen"&gt;Wat te doen&lt;/h2&gt;
&lt;p&gt;Update je projecten en CI/CD-pipelines naar de nieuwste patchversies. Twee RCE-kwetsbaarheden zijn niet iets wat je uitstelt.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 Krijgt MongoDB EF Core en Azure Data Lake — Twee Integraties Die het Proberen Waard Zijn</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/</guid><description>Aspire 13.2 voegt MongoDB Entity Framework Core en Azure Data Lake Storage-integraties toe met automatische health checks en service discovery. Zo zien ze eruit in de praktijk.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aspire 13.2 is geland met twee nieuwe database-integraties die de moeite waard zijn: MongoDB Entity Framework Core en Azure Data Lake Storage.&lt;/p&gt;
&lt;h2 id="mongodb-ontmoet-ef-core-in-aspire"&gt;MongoDB ontmoet EF Core in Aspire&lt;/h2&gt;
&lt;p&gt;Aspire ondersteunde MongoDB al een tijdje, maar het was altijd de ruwe driver — geen EF Core, geen DbContext, geen LINQ-query&amp;rsquo;s. Nu krijg je de volledige EF Core-ervaring met MongoDB, samen met Aspire&amp;rsquo;s automatische health checks en service discovery.&lt;/p&gt;
&lt;p&gt;Instellingen in AppHost:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;mongodb&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddMongoDB&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;mongodb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithDataVolume&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithLifetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ContainerLifetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Persistent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;apiService&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddProject&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ApiService&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mongodb&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In het verbruikende project:&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;dotnet add package Aspire.MongoDB.EntityFrameworkCore
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Registreer je DbContext:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddMongoDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MyDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;mongodb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;mydb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;De integratie regelt connection pooling, OpenTelemetry-traces en health checks achter de schermen.&lt;/p&gt;
&lt;h2 id="azure-data-lake-storage-doet-mee"&gt;Azure Data Lake Storage doet mee&lt;/h2&gt;
&lt;p&gt;In AppHost:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureStorage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;azure-storage&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;dataLake&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddDataLake&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;fileSystem&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddDataLakeFileSystem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake-file-system&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;analyticsService&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddProject&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AnalyticsService&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;analytics&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dataLake&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileSystem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In het verbruikende project:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureDataLakeServiceClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureDataLakeFileSystemClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake-file-system&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Geen handmatig beheer van verbindingsstrings, geen zoektocht naar inloggegevens.&lt;/p&gt;
&lt;h2 id="samenvatting"&gt;Samenvatting&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 is een incrementele release, maar de MongoDB EF Core en Data Lake-integraties vullen echte gaten. &lt;a href="https://get.aspire.dev"&gt;Upgrade naar 13.2&lt;/a&gt; en probeer ze uit.&lt;/p&gt;</content:encoded></item><item><title>azd update — Één Opdracht voor Al je Package Managers</title><link>https://thedotnetblog.com/nl/posts/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/nl/posts/emiliano-montesdeoca/azd-update-universal-upgrade-command/</guid><description>De Azure Developer CLI heeft nu een universele updateopdracht die werkt ongeacht hoe je het hebt geïnstalleerd — winget, Homebrew, Chocolatey of installatiescript.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azd-update-universal-upgrade-command/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ken je dat bericht &amp;ldquo;Een nieuwe versie van azd is beschikbaar&amp;rdquo; dat elke paar weken verschijnt? De boodschap die je wegklikt omdat je niet meer weet of je &lt;code&gt;azd&lt;/code&gt; via winget, Homebrew of dat curl-script van zes maanden geleden hebt geïnstalleerd? Dat is eindelijk opgelost.&lt;/p&gt;
&lt;p&gt;Microsoft heeft zojuist &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;&lt;code&gt;azd update&lt;/code&gt;&lt;/a&gt; uitgebracht — één opdracht die de Azure Developer CLI bijwerkt naar de nieuwste versie, ongeacht hoe je het oorspronkelijk hebt geïnstalleerd.&lt;/p&gt;
&lt;h2 id="hoe-het-werkt"&gt;Hoe het werkt&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;Dat is alles. Voor vroege toegang tot nieuwe functies:&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;De opdracht detecteert je huidige installatiemethode en gebruikt het juiste updatemechanisme.&lt;/p&gt;
&lt;h2 id="de-kleine-vangst"&gt;De kleine vangst&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd update&lt;/code&gt; wordt geleverd vanaf versie 1.23.x. Als je een oudere versie hebt, moet je één laatste handmatige update uitvoeren. Daarna regelt &lt;code&gt;azd update&lt;/code&gt; alles.&lt;/p&gt;
&lt;h2 id="waarom-het-uitmaakt"&gt;Waarom het uitmaakt&lt;/h2&gt;
&lt;p&gt;Dit is een kleine kwaliteitsverbetering, maar voor degenen onder ons die &lt;code&gt;azd&lt;/code&gt; dagelijks gebruiken voor het implementeren van AI-agents en Aspire-apps naar Azure, is het bijblijven belangrijk.&lt;/p&gt;
&lt;p&gt;Lees de &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;volledige aankondiging&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Azure DevOps Server April 2026 Patch — PR-afrondingsoplossing en Beveiligingsupdates</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-devops-server-april-2026-patch/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-devops-server-april-2026-patch/</guid><description>Azure DevOps Server krijgt Patch 3 met een oplossing voor PR-afrondingsfouten, verbeterde afmeldvalidatie en herstelde GitHub Enterprise Server PAT-verbindingen.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-devops-server-april-2026-patch/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Snel bericht voor teams die zelf gehoste Azure DevOps Server draaien: Microsoft heeft &lt;a href="https://devblogs.microsoft.com/devops/april-patches-for-azure-devops-server/"&gt;Patch 3 voor april 2026&lt;/a&gt; uitgebracht met drie gerichte fixes.&lt;/p&gt;
&lt;h2 id="wat-er-opgelost-is"&gt;Wat er opgelost is&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pull request-afrondingsfouten&lt;/strong&gt; — een null reference exception bij automatisch afronden van werkitems kon PR-merges laten mislukken&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Afmeldomleidingsvalidatie&lt;/strong&gt; — verbeterde validatie bij afmelden om potentieel kwaadaardige omleidingen te voorkomen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub Enterprise Server PAT-verbindingen&lt;/strong&gt; — het aanmaken van Personal Access Token-verbindingen is hersteld&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="hoe-te-updaten"&gt;Hoe te updaten&lt;/h2&gt;
&lt;p&gt;Download &lt;a href="https://aka.ms/devopsserverpatch3"&gt;Patch 3&lt;/a&gt; en voer het installatieprogramma uit. Controleer of de patch is toegepast:&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;&amp;lt;patch-installer&amp;gt;.exe CheckInstall
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Microsoft raadt sterk aan om op de nieuwste patch te blijven voor zowel veiligheid als betrouwbaarheid.&lt;/p&gt;</content:encoded></item><item><title>Azure Smart Tier is GA — Automatische Blob Storage Kostenoptimalisatie Zonder Levenscyclusregels</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/</guid><description>Azure Blob Storage smart tier is nu algemeen beschikbaar en verplaatst objecten automatisch tussen hot-, cool- en cold-lagen op basis van werkelijke toegangspatronen.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Als je ooit tijd hebt besteed aan het afstemmen van Azure Blob Storage-levenscyclusbeleid en dit zag instorten wanneer toegangspatronen veranderden, is dit voor jou. Microsoft heeft zojuist de &lt;a href="https://azure.microsoft.com/en-us/blog/optimize-object-storage-costs-automatically-with-smart-tier-now-generally-available/"&gt;algemene beschikbaarheid van smart tier&lt;/a&gt; voor Azure Blob en Data Lake Storage aangekondigd.&lt;/p&gt;
&lt;h2 id="wat-smart-tier-eigenlijk-doet"&gt;Wat smart tier eigenlijk doet&lt;/h2&gt;
&lt;p&gt;Smart tier evalueert continu de tijd van laatste toegang van elk object in je opslagaccount. Frequent geraadpleegde gegevens blijven in hot, inactieve gegevens worden na 30 dagen naar cool verplaatst, daarna na nog eens 60 dagen naar cold. Wanneer gegevens opnieuw worden geopend, worden ze direct terug gepromoveerd naar hot.&lt;/p&gt;
&lt;p&gt;Geen levenscyclusregels om te configureren. Geen handmatige afstemming.&lt;/p&gt;
&lt;p&gt;Tijdens de preview meldde Microsoft dat &lt;strong&gt;meer dan 50% van de door smart tier beheerde capaciteit automatisch naar koelere lagen is verschoven&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="waarom-dit-belangrijk-is-voor-net-ontwikkelaars"&gt;Waarom dit belangrijk is voor .NET-ontwikkelaars&lt;/h2&gt;
&lt;p&gt;Praktische scenario&amp;rsquo;s:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Applicatietelemetrie en logboeken&lt;/strong&gt; — hot bij foutopsporing, zelden geopend na een paar weken&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Datapijplijnen en ETL-uitvoer&lt;/strong&gt; — intensief benaderd tijdens verwerking, daarna meestal cold&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Door gebruikers gegenereerde content&lt;/strong&gt; — recente uploads zijn hot, oudere content koelt geleidelijk af&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="de-afweging"&gt;De afweging&lt;/h2&gt;
&lt;p&gt;De tieringregels van smart tier zijn statisch (30 dagen → cool, 90 dagen → cold). Als je aangepaste drempels nodig hebt, zijn levenscyclusregels nog steeds de weg te gaan.&lt;/p&gt;</content:encoded></item><item><title>Waar Moet Je je AI-Agents op Azure Hosten? Een Praktische Beslissingswijzer</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/</guid><description>Azure biedt zes manieren om AI-agents te hosten — van ruwe containers tot volledig beheerde Foundry Hosted Agents. Zo kies je de juiste voor je .NET-workload.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Als je momenteel AI-agents bouwt met .NET, heb je waarschijnlijk iets opgemerkt: er zijn &lt;em&gt;veel&lt;/em&gt; manieren om ze te hosten op Azure. Container Apps, AKS, Functions, App Service, Foundry Agents, Foundry Hosted Agents.&lt;/p&gt;
&lt;p&gt;Microsoft heeft zojuist een &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;uitgebreide gids voor Azure AI agent-hosting&lt;/a&gt; gepubliceerd.&lt;/p&gt;
&lt;h2 id="de-zes-opties-in-één-oogopslag"&gt;De zes opties in één oogopslag&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Optie&lt;/th&gt;
&lt;th&gt;Beste voor&lt;/th&gt;
&lt;th&gt;Je beheert&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Container Apps&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Volledige containercontrole zonder K8s&lt;/td&gt;
&lt;td&gt;Observabiliteit, staat, levenscyclus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AKS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Enterprise-naleving, multi-cluster&lt;/td&gt;
&lt;td&gt;Alles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Azure Functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Event-gedreven, korte taken&lt;/td&gt;
&lt;td&gt;Bijna niets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;App Service&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Eenvoudige HTTP-agents&lt;/td&gt;
&lt;td&gt;Implementatie, schaling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foundry Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Optionele code-agents&lt;/td&gt;
&lt;td&gt;Bijna niets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foundry Hosted Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Aangepaste framework-agents&lt;/td&gt;
&lt;td&gt;Alleen je agentcode&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="foundry-hosted-agents--het-juiste-midden-voor-net-agentdevelopers"&gt;Foundry Hosted Agents — het juiste midden voor .NET agentdevelopers&lt;/h2&gt;
&lt;p&gt;Implementatie is echt eenvoudig:&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 ext install azure.ai.agents
&lt;/span&gt;&lt;/span&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;Die ene &lt;code&gt;azd up&lt;/code&gt; bouwt je container, stuurt hem naar ACR, richt het Foundry-project in en start je agent.&lt;/p&gt;
&lt;h2 id="mijn-beslissingsraamwerk"&gt;Mijn beslissingsraamwerk&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Nul infrastructuur nodig?&lt;/strong&gt; → Foundry Agents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eigen agentcode maar beheerde hosting gewenst?&lt;/strong&gt; → Foundry Hosted Agents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Event-gedreven, korte taken?&lt;/strong&gt; → Azure Functions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maximale containercontrole?&lt;/strong&gt; → Container Apps&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strikte naleving en multi-cluster?&lt;/strong&gt; → AKS&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="samenvatting"&gt;Samenvatting&lt;/h2&gt;
&lt;p&gt;Voor de meeste .NET-ontwikkelaars die bouwen met Semantic Kernel of Microsoft Agent Framework, is Hosted Agents waarschijnlijk het juiste startpunt. Bekijk de &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;volledige gids van Microsoft&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Agent Skills in .NET Zijn Nu Serieus Flexibel</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/</link><pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/</guid><description>Microsoft Agent Framework ondersteunt nu drie manieren om skills te schrijven — bestanden, klassen en inline code — allemaal samengesteld via één provider. Dit is waarom het belangrijk is en hoe je ze gebruikt.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Als je agents bouwt met Microsoft Agent Framework, ken je de werkwijze: je definieert skills, koppelt ze aan een provider en laat de agent bepalen welke hij aanroept. Nieuw is &lt;em&gt;hoe&lt;/em&gt; je die skills schrijft — en de sprong in flexibiliteit is aanzienlijk.&lt;/p&gt;
&lt;p&gt;De nieuwste update introduceert drie verschillende patronen voor het schrijven van agent skills: &lt;strong&gt;bestand-gebaseerd&lt;/strong&gt;, &lt;strong&gt;klasse-gebaseerd&lt;/strong&gt; en &lt;strong&gt;inline code-gedefinieerd&lt;/strong&gt;. Alle drie koppelen aan één &lt;code&gt;AgentSkillsProviderBuilder&lt;/code&gt;, wat betekent dat je ze kunt mixen zonder routeringslogica.&lt;/p&gt;
&lt;h2 id="bestand-gebaseerde-skills-het-startpunt"&gt;Bestand-gebaseerde skills: het startpunt&lt;/h2&gt;
&lt;p&gt;Bestand-gebaseerde skills zijn precies wat ze klinken — een map op schijf met een &lt;code&gt;SKILL.md&lt;/code&gt;-bestand, optionele scripts en referentiedocumenten:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;skills/
└── onboarding-guide/
├── SKILL.md
├── scripts/
│ └── check-provisioning.py
└── references/
└── onboarding-checklist.md
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;De frontmatter van &lt;code&gt;SKILL.md&lt;/code&gt; declareert de skillnaam en beschrijving, en de instructiesectie vertelt de agent hoe scripts en referenties te gebruiken.&lt;/p&gt;
&lt;p&gt;Je koppelt het met &lt;code&gt;SubprocessScriptRunner.RunAsync&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;skillsProvider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentSkillsProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;skills&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SubprocessScriptRunner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="klasse-gebaseerde-skills-leveren-via-nuget"&gt;Klasse-gebaseerde skills: leveren via NuGet&lt;/h2&gt;
&lt;p&gt;Hier wordt het interessant voor teams. Klasse-gebaseerde skills leiden af van &lt;code&gt;AgentClassSkill&amp;lt;T&amp;gt;&lt;/code&gt; en gebruiken attributen zoals &lt;code&gt;[AgentSkillResource]&lt;/code&gt; en &lt;code&gt;[AgentSkillScript]&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;sealed&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BenefitsEnrollmentSkill&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;AgentClassSkill&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;BenefitsEnrollmentSkill&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;override&lt;/span&gt; &lt;span class="n"&gt;AgentSkillFrontmatter&lt;/span&gt; &lt;span class="n"&gt;Frontmatter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;benefits-enrollment&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;Enroll an employee in health, dental, or vision plans.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [AgentSkillScript(&amp;#34;enroll&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Enroll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;planCode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HrClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EnrollInPlan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;planCode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;JsonSerializer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Serialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;planCode&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Een team kan dit als NuGet-pakket verpakken. Voeg het toe aan je project, stop het in de builder en het werkt naast je bestand-gebaseerde skills.&lt;/p&gt;
&lt;h2 id="inline-skills-de-snelle-brug"&gt;Inline skills: de snelle brug&lt;/h2&gt;
&lt;p&gt;Dat moment wanneer een ander team precies de skill bouwt die je nodig hebt, maar deze pas over een sprint beschikbaar is? &lt;code&gt;AgentInlineSkill&lt;/code&gt; is je brug:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;timeOffSkill&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentInlineSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;time-off-balance&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Calculate remaining vacation and sick days.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;1. Vraag om medewerker-ID. 2. Gebruik calculate-balance. 3. Presenteer resultaten.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddScript&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;calculate-balance&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HrDatabase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetAnnualAllowance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;HrDatabase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetDaysUsed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;JsonSerializer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Serialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Wanneer het NuGet-pakket verschijnt, vervang je de inline skill door de klasse-gebaseerde. De agent merkt het verschil niet.&lt;/p&gt;
&lt;h2 id="scriptgoedkeuring-human-in-the-loop"&gt;Scriptgoedkeuring: human-in-the-loop&lt;/h2&gt;
&lt;p&gt;Voor .NET-ontwikkelaars die productie-agents bouwen, is dit het deel dat implementatiegesprekken daadwerkelijk deblokkert. Zet &lt;code&gt;UseScriptApproval&lt;/code&gt; aan en de agent pauzeert voor het uitvoeren van elk script:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;skillsProvider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentSkillsProviderBuilder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;skills&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;BenefitsEnrollmentSkill&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timeOffSkill&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileScriptRunner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SubprocessScriptRunner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseScriptApproval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="samenvatting"&gt;Samenvatting&lt;/h2&gt;
&lt;p&gt;Agent skills in .NET hebben nu een echt flexibel schrijfmodel. Of je nu een prototype bouwt met bestand-gebaseerde skills of verpakte mogelijkheden via NuGet levert — alle patronen stellen samen via &lt;code&gt;AgentSkillsProviderBuilder&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Bekijk de &lt;a href="https://devblogs.microsoft.com/agent-framework/agent-skills-in-net-three-ways-to-author-one-provider-to-run-them/"&gt;originele aankondiging&lt;/a&gt; en &lt;a href="https://github.com/microsoft/agent-framework/tree/main/dotnet/samples/02-agents/AgentSkills"&gt;GitHub-voorbeelden&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Azure MCP Server 2.0 Net Uitgebracht — Self-Hosted Agentic Cloud Automatisering is er</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</guid><description>Azure MCP Server 2.0 wordt stabiel met self-hosted remote deployments, 276 tools in 57 Azure-services en enterprise-beveiliging.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Als je recentelijk iets hebt gebouwd met MCP en Azure, weet je waarschijnlijk al dat de lokale ervaring goed werkt. Maar wanneer je die setup met je hele team moet delen? Daar werd het ingewikkeld.&lt;/p&gt;
&lt;p&gt;Niet meer. Azure MCP Server &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;heeft 2.0 stabiel bereikt&lt;/a&gt;, en de headlinefunctie is precies wat enterprise-teams hebben gevraagd: &lt;strong&gt;self-hosted remote MCP-serverondersteuning&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="wat-is-azure-mcp-server"&gt;Wat is Azure MCP Server?&lt;/h2&gt;
&lt;p&gt;Azure MCP Server implementeert de &lt;a href="https://modelcontextprotocol.io/docs/getting-started/intro"&gt;Model Context Protocol&lt;/a&gt;-specificatie en exposeert Azure-mogelijkheden als gestructureerde, vindbare tools. De cijfers spreken voor zich: &lt;strong&gt;276 MCP-tools in 57 Azure-services&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="het-grote-nieuws-self-hosted-remote-deployments"&gt;Het grote nieuws: self-hosted remote deployments&lt;/h2&gt;
&lt;p&gt;In een echt teamscenario heb je nodig:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gedeelde toegang voor ontwikkelaars en interne agentsystemen&lt;/li&gt;
&lt;li&gt;Gecentraliseerde configuratie&lt;/li&gt;
&lt;li&gt;Enterprise-netwerk- en beleidslimieten&lt;/li&gt;
&lt;li&gt;Integratie in CI/CD-pipelines&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Azure MCP Server 2.0 pakt dit allemaal aan. Voor authenticatie zijn er twee opties:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Managed Identity&lt;/strong&gt; — bij gebruik met &lt;a href="https://aka.ms/azmcp/self-host/foundry"&gt;Microsoft Foundry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;On-Behalf-Of (OBO)-stroom&lt;/strong&gt; — OpenID Connect-delegatie met de werkelijke rechten van de gebruiker&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="beveiligingsverbetering"&gt;Beveiligingsverbetering&lt;/h2&gt;
&lt;p&gt;Versie 2.0 voegt sterkere endpointvalidatie, bescherming tegen injectiepatronen en strikter isolatiebeheer toe.&lt;/p&gt;
&lt;h2 id="aan-de-slag"&gt;Aan de slag&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp"&gt;GitHub Repo&lt;/a&gt;&lt;/strong&gt; — broncode, documentatie&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/docker"&gt;Docker Image&lt;/a&gt;&lt;/strong&gt; — containerimplementatie&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/vscode"&gt;VS Code-extensie&lt;/a&gt;&lt;/strong&gt; — IDE-integratie&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/self-host"&gt;Zelfhostinghandleiding&lt;/a&gt;&lt;/strong&gt; — 2.0&amp;rsquo;s vlaggenschipfunctie&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>.NET Aspire 13.2 Wil de Beste Vriend van je AI-Agent Zijn</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/</guid><description>Aspire 13.2 gaat all-in op agentische ontwikkeling — gestructureerde CLI-uitvoer, geïsoleerde runs, zelfherstellende omgevingen en volledige OpenTelemetry-data zodat je AI-agents je apps daadwerkelijk kunnen bouwen, uitvoeren en observeren.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ken je dat moment waarop je AI-codeagent solide code schrijft, je enthousiast wordt, en dan valt alles uit elkaar bij het proberen het &lt;em&gt;uit te voeren&lt;/em&gt;? Poortconflicten, phantom processes, verkeerde omgevingsvariabelen — plotseling brandt je agent tokens voor het oplossen van opstartproblemen in plaats van het bouwen van functies.&lt;/p&gt;
&lt;p&gt;Het Aspire-team heeft een &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;zeer doordachte post&lt;/a&gt; gepubliceerd over precies dit probleem, en hun antwoord is overtuigend: Aspire 13.2 is ontworpen niet alleen voor mensen, maar voor AI-agents.&lt;/p&gt;
&lt;h2 id="aspire-als-agentinfrastructuur"&gt;Aspire als agentinfrastructuur&lt;/h2&gt;
&lt;p&gt;Dit is wat Aspire 13.2 meebrengt voor agentische ontwikkeling:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Je hele stack in getypte code.&lt;/strong&gt; De AppHost definieert je volledige topologie — in compileerbare TypeScript of C#:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createBuilder&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;./.modules/aspire.js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;createBuilder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;postgres&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addPostgres&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pg&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;addDatabase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;catalog&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addRedis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;cache&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addNodeApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;src/index.ts&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withHttpEndpoint&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;PORT&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;postgres&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addViteApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;waitFor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;build&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Één commando voor alles.&lt;/strong&gt; In plaats van jongleren met &lt;code&gt;docker compose up&lt;/code&gt;, &lt;code&gt;npm run dev&lt;/code&gt; en database-opstartscripts — alles is gewoon &lt;code&gt;aspire start&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Geïsoleerde modus voor parallelle agents.&lt;/strong&gt; Met &lt;code&gt;--isolated&lt;/code&gt; krijgt elke Aspire-run zijn eigen willekeurige poorten en afzonderlijke gebruikersgeheimen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agentogen via telemetrie.&lt;/strong&gt; De Aspire CLI stelt tijdens development volledige OpenTelemetry-data bloot — traces, metrics, gestructureerde logs.&lt;/p&gt;
&lt;h2 id="de-bowlingbaan-bumper-analogie"&gt;De bowlingbaan-bumper analogie&lt;/h2&gt;
&lt;p&gt;Het Aspire-team gebruikt een geweldige analogie: denk aan Aspire als bowlingbaanbumpers voor AI-agents. Als de agent niet perfect is (en dat zal hij niet zijn), houden de bumpers hem van het gooien in de goot.&lt;/p&gt;
&lt;h2 id="samenvatting"&gt;Samenvatting&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 is niet alleen een framework voor gedistribueerde apps — het wordt essentiële agentinfrastructuur. Lees de &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;volledige post&lt;/a&gt; van het Aspire-team.&lt;/p&gt;</content:encoded></item><item><title>Agentic Platform Engineering Wordt Werkelijkheid — Git-APE Laat Zien Hoe</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/agentic-platform-engineering-git-ape/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/agentic-platform-engineering-git-ape/</guid><description>Microsofts Git-APE project brengt agentic platform engineering in de praktijk — met GitHub Copilot-agents en Azure MCP om natuurlijke taalverzoeken om te zetten in gevalideerde cloudinfrastructuur.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/agentic-platform-engineering-git-ape/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Platform engineering is een van die termen die geweldig klinkt op conferenties maar meestal &amp;ldquo;we hebben een intern portaal en een Terraform-wrapper gebouwd&amp;rdquo; betekent. De echte belofte — self-service infrastructuur die werkelijk veilig, beheerd en snel is — was altijd een paar stappen verwijderd.&lt;/p&gt;
&lt;p&gt;Het Azure-team heeft zojuist &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;Deel 2 van hun agentic platform engineering-serie&lt;/a&gt; gepubliceerd. Ze noemen het &lt;strong&gt;Git-APE&lt;/strong&gt; — een open-source project dat GitHub Copilot-agents en Azure MCP-servers gebruikt om natuurlijke taalverzoeken om te zetten in gevalideerde, geïmplementeerde infrastructuur.&lt;/p&gt;
&lt;h2 id="wat-git-ape-eigenlijk-doet"&gt;Wat Git-APE eigenlijk doet&lt;/h2&gt;
&lt;p&gt;Het kernidee: in plaats van Terraform-modules te leren, praten ontwikkelaars met een Copilot-agent. De agent interpreteert de intentie, genereert Infrastructure-as-Code, valideert tegen beleid en implementeert — allemaal in VS Code.&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;git clone https://github.com/Azure/git-ape
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; git-ape
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Open de werkruimte in VS Code, en de agent-configuratiebestanden worden automatisch gevonden door GitHub Copilot:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;@git-ape deploy a function app with storage in West Europe
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Opruimen is net zo eenvoudig:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;@git-ape destroy my-resource-group
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="waarom-dit-ertoe-doet"&gt;Waarom dit ertoe doet&lt;/h2&gt;
&lt;p&gt;Voor degenen die op Azure bouwen, verschuift dit het platform engineering-gesprek van &amp;ldquo;hoe bouwen we een portaal&amp;rdquo; naar &amp;ldquo;hoe beschrijven we onze guardrails als API&amp;rsquo;s.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Als .NET-ontwikkelaar: Azure MCP Server en GitHub Copilot-agents werken met elke Azure-workload — je ASP.NET Core API, .NET Aspire-stack — alles kan het doel zijn van een agentische deployment flow.&lt;/p&gt;
&lt;h2 id="samenvatting"&gt;Samenvatting&lt;/h2&gt;
&lt;p&gt;Git-APE is een vroeg maar concreet beeld van agentic platform engineering in de praktijk. Clone de &lt;a href="https://github.com/Azure/git-ape"&gt;repo&lt;/a&gt; en lees de &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;volledige post&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Aspire's Geïsoleerde Modus Lost de Port-Conflict Nachtmerrie op voor Parallelle Ontwikkeling</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/</guid><description>Aspire 13.2 introduceert --isolated modus: willekeurige poorten, afzonderlijke geheimen en nul botsingen bij het uitvoeren van meerdere instanties van dezelfde AppHost. Perfect voor AI-agents, worktrees en parallelle workflows.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Als je ooit twee instanties van hetzelfde project tegelijkertijd hebt geprobeerd uit te voeren, ken je de pijn. Poort 8080 is al in gebruik.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 lost dit op met één vlag. James Newton-King heeft &lt;a href="https://devblogs.microsoft.com/aspire/aspire-isolated-mode-parallel-development/"&gt;alle details opgeschreven&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="de-oplossing---isolated"&gt;De oplossing: &lt;code&gt;--isolated&lt;/code&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;aspire run --isolated
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Elke run krijgt:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Willekeurige poorten&lt;/strong&gt; — geen botsingen tussen instanties&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Geïsoleerde gebruikersgeheimen&lt;/strong&gt; — verbindingsstrings en API-sleutels blijven afzonderlijk per instantie&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="echte-scenarios"&gt;Echte scenario&amp;rsquo;s&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Meerdere checkouts:&lt;/strong&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;&lt;span class="c1"&gt;# Terminal 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/projects/my-app-feature
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire run --isolated
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Terminal 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/projects/my-app-bugfix
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire run --isolated
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Beide draaien zonder conflicten.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Achtergrondagents in VS Code.&lt;/strong&gt; Wanneer de achtergrondagent van Copilot Chat een git worktree aanmaakt om onafhankelijk te werken, zorgt de geïsoleerde modus ervoor dat beide instanties gewoon werken.&lt;/p&gt;
&lt;h2 id="samenvatting"&gt;Samenvatting&lt;/h2&gt;
&lt;p&gt;Geïsoleerde modus is een kleine functie die een reëel, steeds vaker voorkomend probleem oplost. Haal 13.2 op met &lt;code&gt;aspire update --self&lt;/code&gt;.&lt;/p&gt;</content:encoded></item><item><title>De Moderniseringsbeoordelingstool van GitHub Copilot Is het Beste Migratiehulpmiddel Dat Je Nog Niet Gebruikt</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/</guid><description>De moderniseringsextensie van GitHub Copilot stelt niet alleen codewijzigingen voor — het produceert een volledige migratiebeoordeling met uitvoerbare problemen, Azure-doelvergelijkingen en een collaboratieve workflow.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Het migreren van een legacy .NET Framework-app naar modern .NET is een van die taken die iedereen weet dat ze moeten doen maar niemand wil beginnen.&lt;/p&gt;
&lt;p&gt;Jeffrey Fritz heeft zojuist een &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;diepgaande analyse van de moderniseringsbeoordelingstool van GitHub Copilot&lt;/a&gt; gepubliceerd.&lt;/p&gt;
&lt;h2 id="het-is-niet-alleen-een-code-suggestie-engine"&gt;Het is niet alleen een code-suggestie-engine&lt;/h2&gt;
&lt;p&gt;De VS Code-extensie volgt een &lt;strong&gt;Beoordeel → Plan → Uitvoer&lt;/strong&gt;-model. De beoordelingsfase analyseert je volledige codebase en produceert een gestructureerd document dat alles vastlegt.&lt;/p&gt;
&lt;p&gt;De beoordeling wordt opgeslagen onder &lt;code&gt;.github/modernize/assessment/&lt;/code&gt;. Elke run produceert een onafhankelijk rapport.&lt;/p&gt;
&lt;h2 id="twee-manieren-om-te-starten"&gt;Twee manieren om te starten&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Aanbevolen beoordeling&lt;/strong&gt; — het snelle pad. Kies uit gecureerde domeinen (Java/.NET Upgrade, Cloud Readiness, Security).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aangepaste beoordeling&lt;/strong&gt; — het gerichte pad. Configureer exact wat te analyseren: doelcomputing (App Service, AKS, Container Apps), doelbesturingssysteem, containerisatieanalyse.&lt;/p&gt;
&lt;h2 id="de-probleemindeling-is-uitvoerbaar"&gt;De probleemindeling is uitvoerbaar&lt;/h2&gt;
&lt;p&gt;Elk probleem heeft een kriticiteitsniveau:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Verplicht&lt;/strong&gt; — moet worden opgelost of migratie mislukt&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Potentieel&lt;/strong&gt; — kan migratie beïnvloeden, vereist menselijk oordeel&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optioneel&lt;/strong&gt; — aanbevolen verbeteringen, blokkeert migratie niet&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mijn-mening"&gt;Mijn mening&lt;/h2&gt;
&lt;p&gt;Als je legacy .NET Framework-apps hebt, is dit &lt;em&gt;het&lt;/em&gt; hulpmiddel om mee te beginnen.&lt;/p&gt;
&lt;p&gt;Lees de &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;volledige walkthrough&lt;/a&gt; en download de &lt;a href="https://aka.ms/ghcp-appmod/vscode-ext"&gt;VS Code-extensie&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Die Visual Studio Zwevende Vensters Instelling die Je Niet Kende (Maar Zou Moeten Kennen)</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/visual-studio-floating-windows-powertoys/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/visual-studio-floating-windows-powertoys/</guid><description>Een verborgen Visual Studio-instelling geeft je volledige controle over zwevende vensters — onafhankelijke taakbalkitems, correct gedrag op meerdere monitoren en perfecte FancyZones-integratie. Één dropdown verandert alles.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/visual-studio-floating-windows-powertoys/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Als je meerdere monitoren gebruikt met Visual Studio (en eerlijk gezegd, wie doet dat tegenwoordig niet), heb je waarschijnlijk de ergernis ervaren: zwevende toolvensters verdwijnen als je de hoofd-IDE minimaliseert, ze blijven altijd bovenop alles staan, en ze verschijnen niet als aparte taakbalkknoppen. Het werkt voor sommige workflows, maar voor multi-monitoropstellingen is het frustrerend.&lt;/p&gt;
&lt;p&gt;Mads Kristensen van het Visual Studio-team &lt;a href="https://devblogs.microsoft.com/visualstudio/take-full-control-of-your-floating-windows-in-visual-studio/"&gt;deelde een weinig bekende instelling&lt;/a&gt; die volledig verandert hoe zwevende vensters zich gedragen. Één dropdown. Dat is alles.&lt;/p&gt;
&lt;h2 id="de-instelling"&gt;De instelling&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Tools &amp;gt; Options &amp;gt; Environment &amp;gt; Windows &amp;gt; Floating Windows&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;De dropdown &amp;ldquo;These floating windows are owned by the main window&amp;rdquo; heeft drie opties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;None&lt;/strong&gt; — volledige onafhankelijkheid. Elk zwevend venster krijgt zijn eigen taakbalkvermelding en gedraagt zich als een normaal Windows-venster.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tool Windows&lt;/strong&gt; (standaard) — documenten zweven vrij, toolvensters blijven gebonden aan de IDE.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documents and Tool Windows&lt;/strong&gt; — klassiek Visual Studio-gedrag, alles gebonden aan het hoofdvenster.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="waarom-none-de-juiste-keuze-is-voor-multi-monitoropstellingen"&gt;Waarom &amp;ldquo;None&amp;rdquo; de juiste keuze is voor multi-monitoropstellingen&lt;/h2&gt;
&lt;p&gt;Stel het in op &lt;strong&gt;None&lt;/strong&gt; en plotseling gedragen al je zwevende toolvensters en documenten zich als echte Windows-applicaties. Ze verschijnen in de taakbalk, blijven zichtbaar als je het hoofd-Visual Studio-venster minimaliseert, en dringen zich niet meer naar voren.&lt;/p&gt;
&lt;p&gt;Combineer dit met &lt;strong&gt;PowerToys FancyZones&lt;/strong&gt; en het is een game changer. Maak aangepaste indelingen over je monitoren, snap je Solution Explorer naar één zone, debugger naar een andere, en codebestanden waar je wilt. Alles blijft op zijn plek, alles is onafhankelijk toegankelijk.&lt;/p&gt;
&lt;h2 id="snelle-aanbevelingen"&gt;Snelle aanbevelingen&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multi-monitor power users&lt;/strong&gt;: Stel in op &lt;strong&gt;None&lt;/strong&gt;, combineer met FancyZones&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Occasionele zwevende vensters&lt;/strong&gt;: &lt;strong&gt;Tool Windows&lt;/strong&gt; (standaard) is een solide middenweg&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Traditionele workflow&lt;/strong&gt;: &lt;strong&gt;Documents and Tool Windows&lt;/strong&gt; houdt alles klassiek&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pro tip: &lt;strong&gt;Ctrl + dubbelklikken&lt;/strong&gt; op de titelbalk van een toolvenster om het direct te laten zweven of te docken. Geen herstart nodig na het wijzigen van de instelling.&lt;/p&gt;
&lt;h2 id="afronding"&gt;Afronding&lt;/h2&gt;
&lt;p&gt;Het is een van die &amp;ldquo;Ik kan niet geloven dat ik dit niet wist&amp;rdquo; instellingen. Als zwevende vensters in Visual Studio je ooit hebben geërgerd, ga dit nu wijzigen.&lt;/p&gt;
&lt;p&gt;Lees het &lt;a href="https://devblogs.microsoft.com/visualstudio/take-full-control-of-your-floating-windows-in-visual-studio/"&gt;volledige bericht&lt;/a&gt; voor details en screenshots.&lt;/p&gt;</content:encoded></item><item><title>MCP-apps Krijgen een Fluent API — Bouw Rijke AI Tool UI in .NET in Drie Stappen</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/</guid><description>De nieuwe fluent-configuratie-API voor MCP Apps op Azure Functions laat je elk .NET MCP-tool omzetten in een volledige app met views, machtigingen en CSP-beleid.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;MCP-tools zijn geweldig voor het geven van mogelijkheden aan AI-agents. Maar wat als je tool iets aan de gebruiker moet tonen?&lt;/p&gt;
&lt;p&gt;Lilian Kasem van het Azure SDK-team &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;introduceerde de nieuwe fluent-configuratie-API&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="de-fluent-api-in-drie-stappen"&gt;De fluent API in drie stappen&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Stap 1: Definieer je functie:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;[Function(nameof(HelloApp))]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;HelloApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [McpToolTrigger(&amp;#34;HelloApp&amp;#34;, &amp;#34;A simple MCP App that says hello.&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ToolInvocationContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Hello from app&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Stap 2: Promoveer het naar een MCP App:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ConfigureMcpTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;HelloApp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsMcpApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;assets/hello-app.html&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithTitle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello App&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithPermissions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;McpAppPermissions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClipboardWrite&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="n"&gt;McpAppPermissions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClipboardRead&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithCsp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csp&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;csp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AllowBaseUri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://www.microsoft.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ConnectTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://www.microsoft.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Stap 3: Voeg je HTML-view toe.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Voeg het pakket toe:&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;dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Mcp --version 1.5.0-preview.1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Lees de &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;volledige post&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Microsoft Foundry Maart 2026 — GPT-5.4, Agent Service GA en de SDK-vernieuwing die Alles Verandert</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/</guid><description>De Foundry-update van maart 2026 is enorm: Agent Service bereikt GA, GPT-5.4 brengt betrouwbaar redeneren, azure-ai-projects SDK gaat stabiel in alle talen.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;De maandelijkse &amp;lsquo;Wat is er nieuw in Microsoft Foundry&amp;rsquo;-berichten zijn meestal een mix van incrementele verbeteringen. De &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;editie van maart 2026&lt;/a&gt;? Vrijwel allemaal headlinefuncties.&lt;/p&gt;
&lt;h2 id="foundry-agent-service-is-productieklaar"&gt;Foundry Agent Service is productieklaar&lt;/h2&gt;
&lt;p&gt;De volgende generatie agent runtime is algemeen beschikbaar — gebouwd op de OpenAI Responses API, wire-compatibel met OpenAI agents.&lt;/p&gt;
&lt;p&gt;Belangrijkste toevoegingen: end-to-end privénetwerken, uitbreiding van MCP-auth, Voice Live-preview en hosted agents in 6 nieuwe regio&amp;rsquo;s.&lt;/p&gt;
&lt;h2 id="gpt-54--betrouwbaarheid-boven-ruwe-intelligentie"&gt;GPT-5.4 — betrouwbaarheid boven ruwe intelligentie&lt;/h2&gt;
&lt;p&gt;GPT-5.4 gaat niet over slimmer zijn. Het gaat over betrouwbaarder zijn.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Prijsstelling (per M tokens)&lt;/th&gt;
&lt;th&gt;Het beste voor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 (≤272K)&lt;/td&gt;
&lt;td&gt;$2.50 / $15 output&lt;/td&gt;
&lt;td&gt;Productieagents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 Pro&lt;/td&gt;
&lt;td&gt;$30 / $180 output&lt;/td&gt;
&lt;td&gt;Diepgaande analyse&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 Mini&lt;/td&gt;
&lt;td&gt;Kosteneffectief&lt;/td&gt;
&lt;td&gt;Classificatie, extractie&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="de-sdk-is-eindelijk-stabiel"&gt;De SDK is eindelijk stabiel&lt;/h2&gt;
&lt;p&gt;De &lt;code&gt;azure-ai-projects&lt;/code&gt; SDK heeft stabiele releases uitgebracht in alle talen — inclusief .NET 2.0.0.&lt;/p&gt;
&lt;h2 id="fireworks-ai-brengt-open-modellen-naar-azure"&gt;Fireworks AI brengt open modellen naar Azure&lt;/h2&gt;
&lt;p&gt;DeepSeek V3.2, gpt-oss-120b, Kimi K2.5 beschikbaar bij lancering.&lt;/p&gt;
&lt;p&gt;Lees de &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;volledige samenvatting&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Real-Time Multi-Agent UI's Bouwen Die Niet Aanvoelen als een Black Box</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/</guid><description>AG-UI en Microsoft Agent Framework werken samen om multi-agent workflows een proper frontend te geven — met real-time streaming, menselijke goedkeuringen en volledige zichtbaarheid in wat je agents doen.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Dit is de werkelijkheid over multi-agent systemen: ze zien er geweldig uit in demo&amp;rsquo;s. Drie agents die werk aan elkaar doorgeven, problemen oplossen, beslissingen nemen. Dan probeer je het aan echte gebruikers te tonen en&amp;hellip; stilte. Een draaiende indicator. Geen idee welke agent wat doet of waarom het systeem gepauzeerd is. Dat is geen product — dat is een vertrouwensprobleem.&lt;/p&gt;
&lt;p&gt;Het Microsoft Agent Framework-team heeft zojuist een &lt;a href="https://devblogs.microsoft.com/agent-framework/ag-ui-multi-agent-workflow-demo/"&gt;fantastisch overzicht&lt;/a&gt; gepubliceerd over het koppelen van MAF-workflows aan &lt;a href="https://github.com/ag-ui-protocol/ag-ui"&gt;AG-UI&lt;/a&gt;, een open protocol voor het streamen van agent-uitvoeringsgebeurtenissen naar een frontend via Server-Sent Events. En eerlijk gezegd? Dit is precies de brug die we misten.&lt;/p&gt;
&lt;h2 id="waarom-dit-belangrijk-is-voor-net-ontwikkelaars"&gt;Waarom dit belangrijk is voor .NET-ontwikkelaars&lt;/h2&gt;
&lt;p&gt;Als je AI-aangedreven apps bouwt, ben je waarschijnlijk al tegen deze muur opgelopen. Je backend-orkestratie werkt prima — agents geven werk aan elkaar door, tools worden uitgevoerd, beslissingen worden genomen. Maar de frontend heeft geen idee wat er achter de schermen gebeurt. AG-UI lost dit op door een standaardprotocol te definiëren voor het streamen van agentgebeurtenissen (&lt;code&gt;RUN_STARTED&lt;/code&gt;, &lt;code&gt;STEP_STARTED&lt;/code&gt;, &lt;code&gt;TOOL_CALL_*&lt;/code&gt;, &lt;code&gt;TEXT_MESSAGE_*&lt;/code&gt;) rechtstreeks naar je UI-laag via SSE.&lt;/p&gt;
&lt;p&gt;De demo die ze bouwden is een klantenserviceworkflow met drie agents: een triageagent die verzoeken routeert, een terugbetalingsagent die financiële zaken afhandelt, en een orderagent die vervangingen beheert. Elke agent heeft zijn eigen tools, en de handoff-topologie is expliciet gedefinieerd — geen &amp;ldquo;bedenk het maar uit de prompt&amp;rdquo;-sfeer.&lt;/p&gt;
&lt;h2 id="de-handoff-topologie-is-de-echte-ster"&gt;De handoff-topologie is de echte ster&lt;/h2&gt;
&lt;p&gt;Wat mij opviel is hoe &lt;code&gt;HandoffBuilder&lt;/code&gt; je in staat stelt een gerichte routeringsgraf tussen agents te declareren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HandoffBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ag_ui_handoff_workflow_demo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;participants&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;refund&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;termination_condition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;termination_condition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;refund&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Refunds, damaged-item claims...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Replacement, exchange...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;refund&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Replacement logistics needed after refund.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;After replacement/shipping tasks complete.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Elke &lt;code&gt;add_handoff&lt;/code&gt; maakt een gerichte koppeling met een beschrijving in natuurlijke taal. Het framework genereert handoff-tools voor elke agent op basis van deze topologie. Routeringsbeslissingen zijn daardoor gegrond in jouw orkestratiestucture, niet in wat het LLM toevallig wil doen. Dat is enorm belangrijk voor betrouwbaarheid in productie.&lt;/p&gt;
&lt;h2 id="human-in-the-loop-die-echt-werkt"&gt;Human-in-the-loop die echt werkt&lt;/h2&gt;
&lt;p&gt;De demo toont twee onderbrekingspatronen die elke echte agentapp nodig heeft:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tool-goedkeuringsonderbrekingen&lt;/strong&gt; — wanneer een agent een tool aanroept die is gemarkeerd met &lt;code&gt;approval_mode=&amp;quot;always_require&amp;quot;&lt;/code&gt;, pauzeert de workflow en stuurt een gebeurtenis. De frontend toont een goedkeuringsmodal met de toolnaam en argumenten. Geen token-verspillende herhalingsloops — gewoon een nette pauze-goedkeur-hervat-stroom.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Informatieverzoekonderbrekingen&lt;/strong&gt; — wanneer een agent meer context van de gebruiker nodig heeft (zoals een order-ID), pauzeert het en vraagt. De frontend toont de vraag, de gebruiker antwoordt, en de uitvoering gaat verder precies waar het gestopt was.&lt;/p&gt;
&lt;p&gt;Beide patronen worden gestreamd als standaard AG-UI-gebeurtenissen, zodat je frontend geen aangepaste logica per agent nodig heeft — het rendert gewoon wat er via de SSE-verbinding binnenkomt.&lt;/p&gt;
&lt;h2 id="het-aansluiten-is-verrassend-eenvoudig"&gt;Het aansluiten is verrassend eenvoudig&lt;/h2&gt;
&lt;p&gt;De integratie tussen MAF en AG-UI is één functieaanroep:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;agent_framework.ag_ui&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AgentFrameworkWorkflow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;add_agent_framework_fastapi_endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FastAPI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;demo_workflow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AgentFrameworkWorkflow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;workflow_factory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;_thread_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;create_handoff_workflow&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ag_ui_handoff_workflow_demo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;add_agent_framework_fastapi_endpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;demo_workflow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/handoff_demo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;De &lt;code&gt;workflow_factory&lt;/code&gt; maakt een nieuwe workflow per thread, zodat elke conversatie geïsoleerde toestand heeft. Het endpoint regelt alle SSE-infrastructuur automatisch. Als je FastAPI al gebruikt (of het als lichte laag kunt toevoegen), is dit vrijwel nul wrijving.&lt;/p&gt;
&lt;h2 id="mijn-kijk"&gt;Mijn kijk&lt;/h2&gt;
&lt;p&gt;Voor ons als .NET-ontwikkelaars is de directe vraag: &amp;ldquo;Kan ik dit in C# doen?&amp;rdquo; Agent Framework is beschikbaar voor zowel .NET als Python, en het AG-UI-protocol is taalonafhankelijk (het is gewoon SSE). Dus hoewel deze specifieke demo Python en FastAPI gebruikt, is het patroon direct overdraagbaar. Je kunt een ASP.NET Core minimal API aansluiten met SSE-endpoints die hetzelfde AG-UI-gebeurtenisschema volgen.&lt;/p&gt;
&lt;p&gt;De grotere les is dat multi-agent UI&amp;rsquo;s een prioriteit worden, geen bijzaak. Als je iets bouwt waarbij agents met mensen interageren — klantenservice, goedkeuringsworkflows, documentverwerking — is deze combinatie van MAF-orkestratie en AG-UI-transparantie het te volgen patroon.&lt;/p&gt;
&lt;h2 id="samenvatting"&gt;Samenvatting&lt;/h2&gt;
&lt;p&gt;AG-UI + Microsoft Agent Framework geeft je het beste van beide werelden: robuuste multi-agent orkestratie op de backend en real-time zichtbaarheid op de frontend. Geen black-box agentinteracties meer.&lt;/p&gt;
&lt;p&gt;Bekijk de &lt;a href="https://devblogs.microsoft.com/agent-framework/ag-ui-multi-agent-workflow-demo/"&gt;volledige walkthrough&lt;/a&gt; en de &lt;a href="https://github.com/ag-ui-protocol/ag-ui"&gt;AG-UI protocol repository&lt;/a&gt; om dieper te gaan.&lt;/p&gt;</content:encoded></item><item><title>SQL MCP Server — De Juiste Manier om AI-agents Databasetoegang te Geven</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/sql-mcp-server-data-api-builder/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/sql-mcp-server-data-api-builder/</guid><description>SQL MCP Server van Data API builder geeft AI-agents veilige, deterministische databasetoegang zonder schema's bloot te stellen of te vertrouwen op NL2SQL.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/sql-mcp-server-data-api-builder/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Laten we eerlijk zijn: de meeste database-MCP-servers die vandaag beschikbaar zijn, zijn angstaanjagend. Ze nemen een zoekopdracht in natuurlijke taal, genereren SQL on-the-fly en voeren het uit op je productiegegevens.&lt;/p&gt;
&lt;p&gt;Het Azure SQL-team heeft zojuist &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;SQL MCP Server geïntroduceerd&lt;/a&gt;, en het neemt een fundamenteel andere aanpak.&lt;/p&gt;
&lt;h2 id="waarom-geen-nl2sql"&gt;Waarom geen NL2SQL?&lt;/h2&gt;
&lt;p&gt;Modellen zijn niet deterministisch. SQL MCP Server gebruikt een &lt;strong&gt;NL2DAB&lt;/strong&gt;-aanpak. De agent werkt met de entiteitsabstractielaag van Data API builder om nauwkeurige T-SQL deterministisch te produceren.&lt;/p&gt;
&lt;h2 id="zeven-tools-niet-zevenhonderd"&gt;Zeven tools, niet zevenhonderd&lt;/h2&gt;
&lt;p&gt;SQL MCP Server biedt precies zeven DML-tools:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;describe_entities&lt;/code&gt; — ontdek beschikbare entiteiten&lt;/li&gt;
&lt;li&gt;&lt;code&gt;create_record&lt;/code&gt; — rijen invoegen&lt;/li&gt;
&lt;li&gt;&lt;code&gt;read_records&lt;/code&gt; — tabellen en views opvragen&lt;/li&gt;
&lt;li&gt;&lt;code&gt;update_record&lt;/code&gt; — rijen wijzigen&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete_record&lt;/code&gt; — rijen verwijderen&lt;/li&gt;
&lt;li&gt;&lt;code&gt;execute_entity&lt;/code&gt; — opgeslagen procedures uitvoeren&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aggregate_records&lt;/code&gt; — aggregatiequery&amp;rsquo;s&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="in-drie-opdrachten-aan-de-slag"&gt;In drie opdrachten aan de slag&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;dab init --database-type mssql --connection-string &lt;span class="s2"&gt;&amp;#34;@env(&amp;#39;sql_connection_string&amp;#39;)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab add Customers --source dbo.Customers --permissions &lt;span class="s2"&gt;&amp;#34;anonymous:*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="het-beveiligingsverhaal-is-solide"&gt;Het beveiligingsverhaal is solide&lt;/h2&gt;
&lt;p&gt;RBAC op elke laag, Azure Key Vault-integratie, Microsoft Entra + aangepaste OAuth.&lt;/p&gt;
&lt;p&gt;Bekijk de &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;volledige post&lt;/a&gt; en &lt;a href="https://aka.ms/sql/mcp"&gt;documentatie&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Verbind Je MCP-servers op Azure Functions met Foundry-agents — Dit Is Hoe</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/</guid><description>Bouw je MCP-server eén keer, deploy het naar Azure Functions en verbind het met Microsoft Foundry-agents met juiste authenticatie.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Er is één ding dat ik geweldig vind aan het MCP-ecosysteem: je bouwt je server één keer en het werkt overal.&lt;/p&gt;
&lt;p&gt;Lily Ma van het Azure SDK-team publiceerde een &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;praktische gids&lt;/a&gt; over het verbinden van MCP-servers die zijn geïmplementeerd op Azure Functions met Microsoft Foundry-agents.&lt;/p&gt;
&lt;h2 id="waarom-deze-combinatie-logisch-is"&gt;Waarom deze combinatie logisch is&lt;/h2&gt;
&lt;p&gt;Azure Functions geeft je schaalbare infrastructuur, ingebouwde authenticatie en serverless facturering. Microsoft Foundry geeft je AI-agents die kunnen redeneren en actie ondernemen.&lt;/p&gt;
&lt;h2 id="authenticatie-opties"&gt;Authenticatie-opties&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Methode&lt;/th&gt;
&lt;th&gt;Gebruikssituatie&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sleutelgebaseerd&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ontwikkeling of servers zonder Entra auth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Microsoft Entra&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Productie met beheerde identiteiten&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OAuth identity passthrough&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Productie met gebruikerscontext&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Niet-geverifieerd&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dev/testen of alleen publieke gegevens&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="instellen"&gt;Instellen&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Deploy je MCP-server naar Azure Functions&lt;/strong&gt; — voorbeelden beschikbaar voor &lt;a href="https://github.com/Azure-Samples/remote-mcp-functions-dotnet"&gt;.NET&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Schakel ingebouwde MCP-authenticatie in&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Haal de endpoint-URL op&lt;/strong&gt; — &lt;code&gt;https://&amp;lt;FUNCTION_APP_NAME&amp;gt;.azurewebsites.net/runtime/webhooks/mcp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Voeg de MCP-server toe als tool in Foundry&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Lees de &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;volledige gids&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.116 — Agents-app Krijgt Toetsenbordnavigatie en Bestandscontextvervolledigingen</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/vscode-1-116-agents-app-updates/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/vscode-1-116-agents-app-updates/</guid><description>VS Code 1.116 richt zich op de polish van de Agents-app — speciale sneltoetsen, toegankelijkheidsverbeteringen, bestandscontextvervolledigingen en CSS @import-linkresolutie.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/vscode-1-116-agents-app-updates/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;VS Code 1.116 is de aprilrelease van 2026, en hoewel het lichter is dan sommige recente updates, zijn de wijzigingen gefocust en betekenisvol — vooral als je de Agents-app dagelijks gebruikt.&lt;/p&gt;
&lt;p&gt;Dit is wat er is geland, op basis van de &lt;a href="https://code.visualstudio.com/updates/v1_116"&gt;officiële releasenotes&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="verbeteringen-aan-de-agents-app"&gt;Verbeteringen aan de Agents-app&lt;/h2&gt;
&lt;p&gt;De Agents-app blijft volwassen worden met gebruiksvriendelijkheidspolish die echt verschil maakt in dagelijkse workflows:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Speciale sneltoetsen&lt;/strong&gt; — je kunt nu de Wijzigingen-weergave, de bestandsstructuur binnen Wijzigingen en de Chat Aanpassingen-weergave focussen met speciale opdrachten en sneltoetsen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Toegankelijkheidshulpdialoogvenster&lt;/strong&gt; — het drukken op &lt;code&gt;Alt+F1&lt;/code&gt; in het chatinvoervak opent nu een toegankelijkheidshulpdialoogvenster met beschikbare opdrachten en sneltoetsen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bestandscontextvervolledigingen&lt;/strong&gt; — typ &lt;code&gt;#&lt;/code&gt; in de Agents-app chat om bestandscontextvervolledigingen te activeren die zijn gescoped tot je huidige werkruimte.&lt;/p&gt;
&lt;h2 id="css-import-linkresolutie"&gt;CSS &lt;code&gt;@import&lt;/code&gt;-linkresolutie&lt;/h2&gt;
&lt;p&gt;Iets leuks voor frontend-ontwikkelaars: VS Code lost nu CSS &lt;code&gt;@import&lt;/code&gt;-verwijzingen op die node_modules-paden gebruiken. Je kunt via imports zoals &lt;code&gt;@import &amp;quot;some-module/style.css&amp;quot;&lt;/code&gt; &lt;code&gt;Ctrl+klikken&lt;/code&gt; wanneer je bundlers gebruikt.&lt;/p&gt;
&lt;h2 id="afsluiting"&gt;Afsluiting&lt;/h2&gt;
&lt;p&gt;VS Code 1.116 draait om verfijning — de Agents-app navigeerbaarder, toegankelijker en toetsenbordvriendelijker maken. Bekijk de &lt;a href="https://code.visualstudio.com/updates/v1_116"&gt;volledige releasenotes&lt;/a&gt; voor de volledige lijst.&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.115 — Achtergrondterminalnotificaties, SSH-agentmodus en Meer</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/vscode-1-115-agent-improvements/</link><pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/vscode-1-115-agent-improvements/</guid><description>VS Code 1.115 brengt achtergrondterminalnotificaties voor agenten, SSH-remote agenthosting, bestandsplakken in terminals en sessiegebonden bewerkingentracking. Dit is wat er toe doet voor .NET-ontwikkelaars.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/vscode-1-115-agent-improvements/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;VS Code 1.115 is zojuist &lt;a href="https://code.visualstudio.com/updates/v1_115"&gt;verschenen&lt;/a&gt;, en hoewel het een lichtere release is wat betreft hoofdfuncties, zijn de agentgerelateerde verbeteringen echt nuttig als je dagelijks met AI-codeassistenten werkt.&lt;/p&gt;
&lt;p&gt;Laat me uitlichten wat er echt de moeite waard is om te weten.&lt;/p&gt;
&lt;h2 id="achtergrondterminals-praten-terug-naar-agenten"&gt;Achtergrondterminals praten terug naar agenten&lt;/h2&gt;
&lt;p&gt;Dit is de uitgelichte functie. Achtergrondterminals informeren agenten nu automatisch wanneer opdrachten zijn voltooid, inclusief de exitcode en terminaluitvoer.&lt;/p&gt;
&lt;p&gt;Waarom is dit belangrijk? Als je de agentmodus van Copilot hebt gebruikt om build-opdrachten of testsuites op de achtergrond uit te voeren, ken je de pijn van &amp;ldquo;is dat al klaar?&amp;rdquo; — achtergrondterminals waren in wezen vuur en vergeet. Nu krijgt de agent een melding wanneer je &lt;code&gt;dotnet build&lt;/code&gt; of &lt;code&gt;dotnet test&lt;/code&gt; is voltooid, ziet de uitvoer en kan dienovereenkomstig reageren.&lt;/p&gt;
&lt;p&gt;Er is ook een nieuwe &lt;code&gt;send_to_terminal&lt;/code&gt;-tool waarmee agenten opdrachten naar achtergrondterminals kunnen sturen met gebruikersbevestiging.&lt;/p&gt;
&lt;h2 id="ssh-remote-agenthosting"&gt;SSH-remote agenthosting&lt;/h2&gt;
&lt;p&gt;VS Code ondersteunt nu verbinding maken met externe machines via SSH, waarbij de CLI automatisch wordt geïnstalleerd en in agenthost-modus wordt gestart.&lt;/p&gt;
&lt;h2 id="bewerkingentracking-in-agentsessies"&gt;Bewerkingentracking in agentsessies&lt;/h2&gt;
&lt;p&gt;Bestandsbewerkingen die tijdens agentsessies zijn gemaakt, worden nu bijgehouden en hersteld, met diffs, ongedaan maken/opnieuw uitvoeren en staatsherstel.&lt;/p&gt;
&lt;h2 id="browsertabbladbewustzijn-en-andere-verbeteringen"&gt;Browsertabbladbewustzijn en andere verbeteringen&lt;/h2&gt;
&lt;p&gt;Nog een paar kwaliteitsverbeteringen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Browsertabbladtracking&lt;/strong&gt; — chat kan nu tabbladen bijhouden die tijdens een sessie zijn geopend en er links naar maken&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bestanden plakken in terminal&lt;/strong&gt; — plak bestanden (inclusief afbeeldingen) in de terminal met Ctrl+V&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testdekking in minimap&lt;/strong&gt; — testdekkingsindicatoren verschijnen nu in de minimap&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Knijpzoom op Mac&lt;/strong&gt; — geïntegreerde browser ondersteunt knijpzoomgebaren&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="afsluiting"&gt;Afsluiting&lt;/h2&gt;
&lt;p&gt;VS Code 1.115 is een incrementele release, maar de agentverbeteringen — achtergrondterminalnotificaties, SSH-agenthosting en bewerkingentracking — zorgen voor een merkbaar soepelere ervaring voor AI-ondersteunde ontwikkeling. Bekijk de &lt;a href="https://code.visualstudio.com/updates/v1_115"&gt;volledige releasenotes&lt;/a&gt; voor elk detail.&lt;/p&gt;</content:encoded></item><item><title>C# 15 Krijgt Union Types — En Ze Zijn Precies Wat We Vroegen</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/csharp-15-union-types-exhaustive-matching/</link><pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/csharp-15-union-types-exhaustive-matching/</guid><description>C# 15 introduceert het `union` sleutelwoord — door de compiler afgedwongen gediscrimineerde unions met uitputtende patroonovereenkomst. Hoe ze eruitzien, waarom ze belangrijk zijn en hoe je ze vandaag kunt uitproberen.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/csharp-15-union-types-exhaustive-matching/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Dit is degene waar ik op heb gewacht. C# 15 introduceert het &lt;code&gt;union&lt;/code&gt; sleutelwoord — echte gediscrimineerde unions met door de compiler afgedwongen uitputtende patroonovereenkomst.&lt;/p&gt;
&lt;p&gt;Bill Wagner &lt;a href="https://devblogs.microsoft.com/dotnet/csharp-15-union-types/"&gt;publiceerde de diepgaande bespreking&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="het-probleem-dat-unions-oplossen"&gt;Het probleem dat unions oplossen&lt;/h2&gt;
&lt;p&gt;Vóór C# 15 was het terugkeren van &amp;ldquo;een van meerdere mogelijke typen&amp;rdquo; altijd een compromis. Je kreeg nooit wat je echt wilt: een gesloten set typen waarbij de compiler garandeert dat je elk geval hebt afgehandeld.&lt;/p&gt;
&lt;h2 id="de-syntaxis-is-prachtig-eenvoudig"&gt;De syntaxis is prachtig eenvoudig&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="k"&gt;record&lt;/span&gt; &lt;span class="nc"&gt;class&lt;/span&gt; &lt;span class="n"&gt;Cat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="k"&gt;record&lt;/span&gt; &lt;span class="nc"&gt;class&lt;/span&gt; &lt;span class="n"&gt;Dog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="k"&gt;record&lt;/span&gt; &lt;span class="nc"&gt;class&lt;/span&gt; &lt;span class="n"&gt;Bird&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="n"&gt;union&lt;/span&gt; &lt;span class="n"&gt;Pet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Cat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Dog&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Bird&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;En hier is de magie — de compiler dwingt uitputtende overeenkomst af:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pet&lt;/span&gt; &lt;span class="k"&gt;switch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Dog&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Cat&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Bird&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Geen &lt;code&gt;_&lt;/code&gt; nodig. Als je later een vierde type aan de union toevoegt, produceert elke switch-expressie die het niet afhandelt een waarschuwing.&lt;/p&gt;
&lt;h2 id="waar-dit-praktisch-wordt"&gt;Waar dit praktisch wordt&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="n"&gt;union&lt;/span&gt; &lt;span class="n"&gt;ApiResult&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ApiError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ValidationFailure&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nu is elke consument gedwongen succes, fout en validatiemislukking te behandelen.&lt;/p&gt;
&lt;h2 id="probeer-het-vandaag"&gt;Probeer het vandaag&lt;/h2&gt;
&lt;p&gt;Union types zijn beschikbaar in .NET 11 Preview 2. Bekijk de &lt;a href="https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/union"&gt;volledige taalreferentie&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 Brengt een Docs CLI — en je AI-Agent Kan die Ook Gebruiken</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/</link><pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/</guid><description>.NET Aspire 13.2 voegt aspire docs toe — een CLI voor het zoeken, doorbladeren en lezen van officiële documentatie zonder je terminal te verlaten. Werkt ook als tool voor AI-agents.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ken je dat moment waarop je diep in een Aspire AppHost zit, integraties bekabelt, en je precies moet controleren welke parameters de Redis-integratie verwacht? Je alt-tabbt naar je browser, zoekt op aspire.dev. Context verloren.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 heeft &lt;a href="https://devblogs.microsoft.com/aspire/aspire-docs-in-your-terminal/"&gt;een oplossing daarvoor gepubliceerd&lt;/a&gt;. De &lt;code&gt;aspire docs&lt;/code&gt; CLI laat je zoeken in officiële Aspire-documentatie, er doorheen bladeren en het lezen, direct vanuit je terminal.&lt;/p&gt;
&lt;h2 id="drie-opdrachten-nul-browsertabbladen"&gt;Drie opdrachten, nul browsertabbladen&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;&lt;span class="c1"&gt;# Lijst alle docs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Zoek een onderwerp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs search &lt;span class="s2"&gt;&amp;#34;redis&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Lees een volledige pagina&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs get redis-integration
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Slechts één sectie&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs get redis-integration --section &lt;span class="s2"&gt;&amp;#34;Add Redis resource&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="de-ai-agent-invalshoek"&gt;De AI-agent invalshoek&lt;/h2&gt;
&lt;p&gt;Dezelfde &lt;code&gt;aspire docs&lt;/code&gt;-opdrachten werken als tools voor AI-agents. In plaats van Aspire API&amp;rsquo;s te verzinnen op basis van verouderde trainingsdata, kan de agent &lt;code&gt;aspire docs search &amp;quot;postgres&amp;quot;&lt;/code&gt; aanroepen en de officiële integratiedocumentatie lezen.&lt;/p&gt;
&lt;h2 id="samenvatting"&gt;Samenvatting&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;aspire docs&lt;/code&gt; is een kleine functie die een echt probleem netjes oplost. Bekijk &lt;a href="https://davidpine.dev/posts/aspire-docs-mcp-tools/"&gt;David Pine&amp;rsquo;s diepgaande analyse&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Microsoft Agent Framework Bereikt 1.0 — Dit Is Wat Er Echt Toe Doet voor .NET-Ontwikkelaars</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/agent-framework-1-0-production-ready/</link><pubDate>Fri, 03 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/agent-framework-1-0-production-ready/</guid><description>Microsoft Agent Framework 1.0 is productieklaar met stabiele API's, multi-agent-orkestratie en connectors voor elke grote AI-provider. Dit moet je weten als .NET-ontwikkelaar.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/agent-framework-1-0-production-ready/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Als je de Agent Framework-reis hebt gevolgd vanaf de vroege dagen van Semantic Kernel en AutoGen, dan is dit significant. Microsoft Agent Framework heeft zojuist &lt;a href="https://devblogs.microsoft.com/agent-framework/microsoft-agent-framework-version-1-0/"&gt;versie 1.0 bereikt&lt;/a&gt; — productieklaar, stabiele API&amp;rsquo;s, toezegging voor langetermijnondersteuning. Beschikbaar voor .NET en Python, en echt klaar voor echte workloads.&lt;/p&gt;
&lt;p&gt;Laten we door het aankondigingslawaai heen snijden en ons richten op wat ertoe doet als je AI-aangedreven apps bouwt met .NET.&lt;/p&gt;
&lt;h2 id="de-korte-versie"&gt;De korte versie&lt;/h2&gt;
&lt;p&gt;Agent Framework 1.0 verenigt wat vroeger Semantic Kernel en AutoGen was in één open-source SDK. Één agent-abstractie. Één orkestratieengine. Meerdere AI-providers. Als je heen en weer ging tussen Semantic Kernel voor enterprise-patronen en AutoGen voor research-grade multi-agent workflows, kun je stoppen. Dit is nu de ene SDK.&lt;/p&gt;
&lt;h2 id="beginnen-is-bijna-oneerlijk-eenvoudig"&gt;Beginnen is bijna oneerlijk eenvoudig&lt;/h2&gt;
&lt;p&gt;Hier is een werkende agent in .NET:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// dotnet add package Microsoft.Agents.AI.OpenAI --prerelease&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.Agents.AI&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.Agents.AI.Foundry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Azure.Identity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;https://your-project.services.ai.azure.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetResponsesClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gpt-5.3&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsAIAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;HaikuBot&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;You are an upbeat assistant that writes beautifully.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Write a haiku about shipping 1.0.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dat is het. Een handvol regels en je hebt een AI-agent die op Azure Foundry draait. Het Python-equivalent is even beknopt. Voeg functietools, meerturnsgesprekken en streaming toe naarmate je verder gaat — het API-oppervlak schaalt op zonder vreemd te worden.&lt;/p&gt;
&lt;h2 id="multi-agent-orkestratie--dit-is-het-echte-werk"&gt;Multi-agent-orkestratie — dit is het echte werk&lt;/h2&gt;
&lt;p&gt;Enkele agents zijn prima voor demo&amp;rsquo;s, maar productiescenario&amp;rsquo;s vereisen meestal coördinatie. Agent Framework 1.0 wordt geleverd met in de strijd geteste orkestratiepatronen rechtstreeks uit Microsoft Research en AutoGen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sequential&lt;/strong&gt; — agents verwerken op volgorde (schrijver → reviewer → editor)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concurrent&lt;/strong&gt; — fan out naar meerdere agents in parallel, resultaten samenvoegen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Handoff&lt;/strong&gt; — één agent delegeert naar een andere op basis van intentie&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Group chat&lt;/strong&gt; — meerdere agents bespreken en convergeren naar een oplossing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Magentic-One&lt;/strong&gt; — het research-grade multi-agent patroon van MSR&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ze ondersteunen allemaal streaming, checkpointing, human-in-the-loop goedkeuringen en pauzeren/hervatten. Het checkpointing-deel is cruciaal — langlopende workflows overleven procesrestarts.&lt;/p&gt;
&lt;h2 id="de-meest-belangrijke-functies"&gt;De meest belangrijke functies&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Middleware-hooks.&lt;/strong&gt; Ken je de middleware-pipelines in ASP.NET Core? Hetzelfde concept, maar voor agentuitvoering. Onderschep elke fase — voeg inhoudsbeveiliging, logging, nalevingsbeleid toe — zonder agentvragen aan te raken.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pluggable geheugen.&lt;/strong&gt; Gespreksgeschiedenis, persistente sleutel-waardestatus, vectorgebaseerd ophalen. Kies je backend: Foundry Agent Service, Mem0, Redis, Neo4j of eigen implementatie.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Declaratieve YAML-agents.&lt;/strong&gt; Definieer de instructies, tools, geheugen en orkestratietopologie van je agent in versiegecontroleerde YAML-bestanden. Laad en voer uit met één API-aanroep.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A2A- en MCP-ondersteuning.&lt;/strong&gt; MCP (Model Context Protocol) stelt agents in staat externe tools dynamisch te ontdekken en aan te roepen. A2A (Agent-to-Agent protocol) maakt samenwerking tussen runtimes mogelijk.&lt;/p&gt;
&lt;h2 id="preview-functies-die-de-moeite-waard-zijn"&gt;Preview-functies die de moeite waard zijn&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DevUI&lt;/strong&gt; — een op browser gebaseerde lokale debugger voor het visualiseren van agentuitvoering, berichtstromen en toolaanroepen in real-time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub Copilot SDK en Claude Code SDK&lt;/strong&gt; — gebruik Copilot of Claude als agentharnas rechtstreeks vanuit je orkestatiecode.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent Harness&lt;/strong&gt; — aanpasbare lokale runtime die agents toegang geeft tot shell, bestandssysteem en berichtlussen.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skills&lt;/strong&gt; — herbruikbare domeinvermogenspakketten.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="migreren-van-semantic-kernel-of-autogen"&gt;Migreren van Semantic Kernel of AutoGen&lt;/h2&gt;
&lt;p&gt;Als je bestaande Semantic Kernel- of AutoGen-code hebt, zijn er speciale migratieassistenten die je code analyseren en stap-voor-stap migratieplannen genereren.&lt;/p&gt;
&lt;h2 id="samenvatting"&gt;Samenvatting&lt;/h2&gt;
&lt;p&gt;Agent Framework 1.0 is de productiemijlpaal waar enterprise-teams op hebben gewacht. Stabiele API&amp;rsquo;s, multi-providerondersteuning en orkestratiepatronen die echt op schaal werken.&lt;/p&gt;
&lt;p&gt;Het framework is &lt;a href="https://github.com/microsoft/agent-framework"&gt;volledig open source op GitHub&lt;/a&gt;. Als je wachtte op het &amp;ldquo;veilig om in productie te gebruiken&amp;rdquo;-signaal — dit is het.&lt;/p&gt;</content:encoded></item><item><title>azd Laat Je Nu AI-Agents Lokaal Uitvoeren en Debuggen — Dit Veranderde in Maart 2026</title><link>https://thedotnetblog.com/nl/posts/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/nl/posts/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</guid><description>Azure Developer CLI bracht in maart 2026 zeven releases uit. Highlights: een lokale loop voor uitvoeren en debuggen van AI-agents, GitHub Copilot-integratie in projectopstelling en ondersteuning voor Container App Jobs.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Zeven releases in één maand. Dat is wat het Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;)-team in maart 2026 uitbracht, en de hoofdfunctie is waar ik op wachtte: &lt;strong&gt;een lokale loop voor uitvoeren en debuggen van AI-agents&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="ai-agents-uitvoeren-en-debuggen-zonder-implementeren"&gt;AI-agents uitvoeren en debuggen zonder implementeren&lt;/h2&gt;
&lt;p&gt;Dit is de grote. De nieuwe extensie &lt;code&gt;azure.ai.agents&lt;/code&gt; voegt een reeks opdrachten toe:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;azd ai agent run&lt;/code&gt; — start je agent lokaal&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt; — stuurt berichten naar hem (lokaal of geïmplementeerd)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent show&lt;/code&gt; — toont containerstatus en gezondheid&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt; — streamt containerlogs in real-time&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voorheen betekende het testen van een AI-agent telkens implementeren naar Microsoft Foundry. Nu kun je lokaal itereren.&lt;/p&gt;
&lt;h2 id="github-copilot-maakt-je-azd-project-aan"&gt;GitHub Copilot maakt je azd-project aan&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd init&lt;/code&gt; biedt nu een optie &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo;. Een Copilot-agent maakt de configuratie voor je projectstructuur.&lt;/p&gt;
&lt;h2 id="container-app-jobs-en-implementatieverbeteringen"&gt;Container App Jobs en implementatieverbeteringen&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; implementeert nu &lt;code&gt;Microsoft.App/jobs&lt;/code&gt; via de bestaande &lt;code&gt;host: containerapp&lt;/code&gt;-config&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configureerbare implementatie-time-outs&lt;/strong&gt;: Nieuwe &lt;code&gt;--timeout&lt;/code&gt;-vlag op &lt;code&gt;azd deploy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lokale build-fallback&lt;/strong&gt;: Wanneer remote ACR-build mislukt, schakelt &lt;code&gt;azd&lt;/code&gt; automatisch terug naar lokale Docker/Podman&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lokale preflight-validatie&lt;/strong&gt;: Bicep-parameters worden lokaal gevalideerd vóór implementatie&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="samenvatting"&gt;Samenvatting&lt;/h2&gt;
&lt;p&gt;De lokale AI-agent debuggingloop is de ster van deze release. Bekijk de &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;volledige releasenotes&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Azure DevOps Lost Eindelijk de Markdown Editor UX op Waar Iedereen Over Klaagde</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-devops-markdown-editor-work-items/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-devops-markdown-editor-work-items/</guid><description>De Markdown-editor van Azure DevOps voor werkitems krijgt een duidelijker onderscheid tussen voorbeeld- en bewerkmodus. Het is een kleine verandering die een echte workflow-irritatie oplost.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-devops-markdown-editor-work-items/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Als je Azure Boards gebruikt, heb je dit waarschijnlijk meegemaakt: je leest door een werkitembeschrijving, misschien acceptatiecriteria bekijkend, en dan klik je per ongeluk dubbel. Boem — je bent in de bewerkingsmodus. Je wilde helemaal niets bewerken. Je was gewoon aan het lezen.&lt;/p&gt;
&lt;p&gt;Dan Hellem &lt;a href="https://devblogs.microsoft.com/devops/improving-the-markdown-editor-for-work-items/"&gt;kondigde de fix aan&lt;/a&gt;, en het is een van die veranderingen die klein klinkt maar echt wrijving verwijdert uit je dagelijkse workflow.&lt;/p&gt;
&lt;h2 id="wat-er-veranderd-is"&gt;Wat er veranderd is&lt;/h2&gt;
&lt;p&gt;De Markdown-editor voor tekstuele werkitemvelden opent nu standaard in &lt;strong&gt;voorbeeldmodus&lt;/strong&gt;. Je kunt inhoud lezen en ermee interageren — links volgen, opmaak bekijken — zonder je zorgen te maken dat je per ongeluk in de bewerkingsmodus terechtkomt.&lt;/p&gt;
&lt;p&gt;Wanneer je daadwerkelijk wilt bewerken, klik je op het bewerkingspictogram bovenaan het veld. Wanneer je klaar bent, ga je expliciet terug naar de voorbeeldmodus.&lt;/p&gt;
&lt;h2 id="waarom-het-meer-uitmaakt-dan-het-klinkt"&gt;Waarom het meer uitmaakt dan het klinkt&lt;/h2&gt;
&lt;p&gt;De &lt;a href="https://developercommunity.visualstudio.com/t/Markdown-editor-for-work-item-multi-line/10935496"&gt;community-feedbackthread&lt;/a&gt; hierover was lang. Het dubbelklik-om-te-bewerken-gedrag werd geïntroduceerd met de Markdown-editor in juli 2025, en de klachten begonnen bijna onmiddellijk.&lt;/p&gt;
&lt;h2 id="uitrolstatus"&gt;Uitrolstatus&lt;/h2&gt;
&lt;p&gt;Dit wordt al uitgerold naar een subset van klanten en breidt zich de komende twee tot drie weken uit naar iedereen.&lt;/p&gt;</content:encoded></item><item><title>Bookmark Studio Brengt Op Slots Gebaseerde Navigatie en Delen naar Visual Studio-bladwijzers</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/bookmark-studio-visual-studio-extension/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/bookmark-studio-visual-studio-extension/</guid><description>De nieuwe Bookmark Studio-extensie van Mads Kristensen voegt via het toetsenbord aangestuurde slotnavigatie, een bladwijzerbeheerder, kleuren, labels en export-/deelmogelijkheden toe.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/bookmark-studio-visual-studio-extension/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bladwijzers in Visual Studio zijn altijd&amp;hellip; oké geweest. Je plaatst er een, navigeert naar de volgende, vergeet welke welke is.&lt;/p&gt;
&lt;p&gt;Mads Kristensen heeft zojuist &lt;a href="https://devblogs.microsoft.com/visualstudio/bookmark-studio-evolving-bookmarks-in-visual-studio/"&gt;Bookmark Studio uitgebracht&lt;/a&gt;, een experimentele extensie die precies de gaten opvult die je waarschijnlijk bent tegengekomen als je bladwijzers regelmatig gebruikt.&lt;/p&gt;
&lt;h2 id="op-slots-gebaseerde-navigatie"&gt;Op slots gebaseerde navigatie&lt;/h2&gt;
&lt;p&gt;De kerntoevoeging: bladwijzers kunnen nu worden toegewezen aan slots 1–9 en direct worden bereikt met &lt;code&gt;Alt+Shift+1&lt;/code&gt; tot &lt;code&gt;Alt+Shift+9&lt;/code&gt;. Dit verandert bladwijzers van &amp;ldquo;ik heb ergens bladwijzers&amp;rdquo; naar &amp;ldquo;Slot 3 is mijn API-controller, Slot 5 is de servicelaag.&amp;rdquo;&lt;/p&gt;
&lt;h2 id="de-bladwijzerbeheerder"&gt;De Bladwijzerbeheerder&lt;/h2&gt;
&lt;p&gt;Een nieuw toolvenster toont al je bladwijzers op één plek met filtering op naam, bestand, locatie, kleur of slot.&lt;/p&gt;
&lt;h2 id="organisatie-met-labels-kleuren-en-mappen"&gt;Organisatie met labels, kleuren en mappen&lt;/h2&gt;
&lt;p&gt;Bladwijzers kunnen optioneel labels en kleuren hebben en in mappen worden gegroepeerd. Alle metadata wordt per oplossing opgeslagen.&lt;/p&gt;
&lt;h2 id="exporteren-en-delen"&gt;Exporteren en delen&lt;/h2&gt;
&lt;p&gt;Bookmark Studio laat je bladwijzers exporteren als platte tekst, Markdown of CSV:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bladwijzerpaden opnemen in pull request-beschrijvingen&lt;/li&gt;
&lt;li&gt;Onderzoekssporen delen met teamleden&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Haal het op van de &lt;a href="https://marketplace.visualstudio.com/items?itemName=MadsKristensen.BookmarkStudio"&gt;Visual Studio Marketplace&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>De Maart-update van Visual Studio Laat Je Eigen Copilot-agenten Bouwen — en de find_symbol Tool Is een Grote Stap</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/visual-studio-march-2026-custom-copilot-agents/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/visual-studio-march-2026-custom-copilot-agents/</guid><description>De maart 2026-update van Visual Studio brengt aangepaste Copilot-agenten, herbruikbare agentvaardigheden, een taalvriendelijke find_symbol-tool en Copilot-ondersteunde profilering vanuit Test Explorer. Dit is wat er toe doet.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/visual-studio-march-2026-custom-copilot-agents/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Visual Studio heeft zojuist zijn meest significante Copilot-update tot nu toe ontvangen. Mark Downie &lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-march-update-build-your-own-custom-agents/"&gt;kondigde de maartrelease aan&lt;/a&gt;, en de kop is aangepaste agenten — maar eerlijk gezegd, de &lt;code&gt;find_symbol&lt;/code&gt;-tool die verder verborgen zit, is mogelijk de functie die je workflow het meest verandert.&lt;/p&gt;
&lt;p&gt;Laat me uitleggen wat er echt is.&lt;/p&gt;
&lt;h2 id="aangepaste-copilot-agenten-in-je-repository"&gt;Aangepaste Copilot-agenten in je repository&lt;/h2&gt;
&lt;p&gt;Wil je dat Copilot de codestandaarden van je team volgt, je build-pipeline uitvoert of je interne documentatie raadpleegt? Nu kun je precies dat bouwen.&lt;/p&gt;
&lt;p&gt;Aangepaste agenten worden gedefinieerd als &lt;code&gt;.agent.md&lt;/code&gt;-bestanden die je in &lt;code&gt;.github/agents/&lt;/code&gt; in je repository plaatst. Elke agent heeft volledige toegang tot werkruimtebewustzijn, codebegrip, tools, je voorkeursmodel en MCP-verbindingen met externe services.&lt;/p&gt;
&lt;p&gt;Dit is hetzelfde patroon dat VS Code heeft ondersteund — en het is geweldig om te zien dat Visual Studio bijhoudt.&lt;/p&gt;
&lt;h2 id="agentvaardigheden-herbruikbare-instructiepakketten"&gt;Agentvaardigheden: herbruikbare instructiepakketten&lt;/h2&gt;
&lt;p&gt;Vaardigheden worden automatisch opgehaald uit &lt;code&gt;.github/skills/&lt;/code&gt; in je repository of &lt;code&gt;~/.copilot/skills/&lt;/code&gt; in je profiel.&lt;/p&gt;
&lt;h2 id="find_symbol-taalbewuste-navigatie-voor-agenten"&gt;find_symbol: taalbewuste navigatie voor agenten&lt;/h2&gt;
&lt;p&gt;Dit is waar het echt interessant wordt. De nieuwe &lt;code&gt;find_symbol&lt;/code&gt;-tool geeft de agentmodus van Copilot echte, door de taalservice aangedreven symboolnavigatie. In plaats van code als tekst te doorzoeken, kan de agent:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Alle verwijzingen naar een symbool door je project vinden&lt;/li&gt;
&lt;li&gt;Toegang krijgen tot type-informatie, declaraties en bereikmetadata&lt;/li&gt;
&lt;li&gt;Aanroeplocaties navigeren met volledige taalbewustzijn&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wat dit in de praktijk betekent: als je Copilot vraagt een methode te refactoren of een parameterhandtekening bij alle aanroeplocaties bij te werken, kan het de structuur van je code echt zien.&lt;/p&gt;
&lt;h2 id="tests-profileren-met-copilot"&gt;Tests profileren met Copilot&lt;/h2&gt;
&lt;p&gt;Er is nu een &lt;strong&gt;Profile with Copilot&lt;/strong&gt;-opdracht in het contextmenu van Test Explorer. Selecteer een test, klik op profileren, en de Profiling Agent voert hem automatisch uit en analyseert de prestaties.&lt;/p&gt;
&lt;h2 id="afsluiting"&gt;Afsluiting&lt;/h2&gt;
&lt;p&gt;Aangepaste agenten en vaardigheden zijn de kop, maar &lt;code&gt;find_symbol&lt;/code&gt; is de stille hit — het verandert fundamenteel hoe nauwkeurig Copilot kan zijn bij het refactoren van .NET-code. Download &lt;a href="https://visualstudio.microsoft.com/downloads/"&gt;Visual Studio 2026 Insiders&lt;/a&gt; om alles uit te proberen.&lt;/p&gt;</content:encoded></item><item><title>Het Dashboard van Aspire 13.2 Heeft Nu een Telemetry API — en Dat Verandert Alles</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-132-dashboard-export-telemetry/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-132-dashboard-export-telemetry/</guid><description>.NET Aspire 13.2 brengt slimmere telemetrie-export, een programmeerbare API voor traces en logs, en GenAI-visualisatieverbeteringen. Dit is waarom het uitmaakt voor je debugging-workflow.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/aspire-132-dashboard-export-telemetry/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Als je gedistribueerde apps bouwt met .NET Aspire, weet je al dat het dashboard het beste deel van de hele ervaring is. Aspire 13.2 heeft het aanzienlijk verbeterd.&lt;/p&gt;
&lt;h2 id="telemetrie-exporteren-zoals-een-normaal-persoon"&gt;Telemetrie exporteren zoals een normaal persoon&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 voegt een proper &lt;strong&gt;Beheer logs en telemetrie&lt;/strong&gt;-dialoogvenster toe waar je kunt:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Alle telemetrie wissen&lt;/li&gt;
&lt;li&gt;Geselecteerde telemetrie exporteren naar een ZIP-bestand in standaard OTLP/JSON-indeling&lt;/li&gt;
&lt;li&gt;Die ZIP later importeren in een willekeurig Aspire-dashboard&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dat laatste deel is de killer-feature. Reproduceer een bug, exporteer de telemetrie, voeg het toe aan je werkitem, en je teamgenoot kan het importeren in hun eigen dashboard.&lt;/p&gt;
&lt;h2 id="de-telemetrie-api-is-de-echte-game-changer"&gt;De telemetrie-API is de echte game changer&lt;/h2&gt;
&lt;p&gt;Het dashboard stelt nu een HTTP API bloot onder &lt;code&gt;/api/telemetry&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/resources&lt;/code&gt; — lijst van resources met telemetrie&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/spans&lt;/code&gt; — spans opvragen met filters&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/logs&lt;/code&gt; — logs opvragen met filters&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/traces&lt;/code&gt; — traces weergeven&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dit ondersteunt de nieuwe CLI-opdrachten &lt;code&gt;aspire agent mcp&lt;/code&gt; en &lt;code&gt;aspire otel&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="genai-telemetrie-wordt-praktisch"&gt;GenAI-telemetrie wordt praktisch&lt;/h2&gt;
&lt;p&gt;VS Code Copilot chat en Copilot CLI ondersteunen het configureren van een &lt;code&gt;OTEL_EXPORTER_OTLP_ENDPOINT&lt;/code&gt; — wijs ze naar het Aspire-dashboard en je kunt je AI-agents in real-time zien denken via telemetrie.&lt;/p&gt;
&lt;h2 id="samenvatting"&gt;Samenvatting&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 transformeert het dashboard van &amp;ldquo;prettige debugging-UI&amp;rdquo; naar &amp;ldquo;programmeerbaar observabiliteitsplatform&amp;rdquo;. Ga naar &lt;a href="https://aspire.dev"&gt;aspire.dev&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>KubeCon Europe 2026: Waar .NET-ontwikkelaars Echt Op Moeten Letten</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/</guid><description>Microsoft gooide een muur van Kubernetes-aankondigingen bij KubeCon Europe 2026. Dit is de gefilterde versie — alleen de AKS- en cloud-native-updates die ertoe doen als je .NET-apps levert.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Microsoft publiceerde zojuist hun &lt;a href="https://opensource.microsoft.com/blog/2026/03/24/whats-new-with-microsoft-in-open-source-and-kubernetes-at-kubecon-cloudnativecon-europe-2026/"&gt;volledige KubeCon Europe 2026-samenvatting&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="mtls-zonder-service-mesh-belasting"&gt;mTLS zonder service mesh-belasting&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/application-network"&gt;Azure Kubernetes Application Network&lt;/a&gt; geeft je onderlinge TLS, applicatiebewuste autorisatie en verkeerstelemetrie — zonder een volledige sidecar-mesh. Je ASP.NET Core API&amp;rsquo;s die met achtergrondworkers communiceren — alles versleuteld op netwerkniveau, zonder wijzigingen in applicatiecode.&lt;/p&gt;
&lt;h2 id="gpu-observeerbaarheid"&gt;GPU-observeerbaarheid&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/managed-gpu-metrics"&gt;AKS toont nu GPU-metrics native&lt;/a&gt; in beheerde Prometheus en Grafana. Geen aangepaste exporteurs.&lt;/p&gt;
&lt;h2 id="netwerken-over-clusters-heen"&gt;Netwerken over clusters heen&lt;/h2&gt;
&lt;p&gt;Azure Kubernetes Fleet Manager levert nu &lt;a href="https://aka.ms/kubernetes-fleet/networking/cross-cluster"&gt;cross-cluster-netwerken&lt;/a&gt; — unified connectivity, globaal serviceregister.&lt;/p&gt;
&lt;h2 id="veiligere-upgrades"&gt;Veiligere upgrades&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Blauw-groene agent pool-upgrades&lt;/strong&gt; maken een parallel knooppuntpool. &lt;strong&gt;Agent pool-terugdraaien&lt;/strong&gt; laat je terugkeren naar de vorige versie.&lt;/p&gt;
&lt;h2 id="waar-te-beginnen"&gt;Waar te beginnen&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Observeerbaarheid eerst&lt;/strong&gt; — schakel GPU-metrics en netwerkstroomlogboeken in&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Probeer blauw-groene upgrades&lt;/strong&gt; — test de terugdraaiworkflow&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pilot identiteitsbewust netwerken&lt;/strong&gt; — schakel mTLS in voor één servicepad&lt;/li&gt;
&lt;/ol&gt;</content:encoded></item><item><title>SQL MCP Server, Copilot in SSMS en een Database Hub met AI-agents: Wat Er Echt Toe Doet van SQLCon 2026</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/</link><pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/</guid><description>Microsoft deed een reeks databaseaankondigingen op SQLCon 2026. Dit is wat er echt toe doet als je AI-aangedreven apps bouwt op Azure SQL.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Microsoft heeft zojuist &lt;a href="https://www.microsoft.com/en-us/sql-server/blog/2026/03/18/advancing-agentic-ai-with-microsoft-databases-across-a-unified-data-estate/"&gt;SQLCon 2026 gelanceerd naast FabCon in Atlanta&lt;/a&gt;. Ik sla de enterprise-prijsslides over en focus op de onderdelen die ertoe doen voor ontwikkelaars die met Azure SQL en AI bouwen.&lt;/p&gt;
&lt;h2 id="sql-mcp-server-is-in-openbare-preview"&gt;SQL MCP Server is in openbare preview&lt;/h2&gt;
&lt;p&gt;Dit is de kop voor mij. Azure SQL Database Hyperscale heeft nu een &lt;strong&gt;SQL MCP Server&lt;/strong&gt; in openbare preview waarmee je SQL-gegevens veilig kunt verbinden met AI-agents en Copilots via het &lt;a href="https://modelcontextprotocol.io/"&gt;Model Context Protocol&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Voor .NET-ontwikkelaars die AI-agents bouwen met Semantic Kernel of Microsoft Agent Framework opent dit een schoon integratiepad. Je agent moet voorraad controleren? Een klantrecord opzoeken? Een bestelling valideren? MCP geeft het een gestructureerde manier om dat te doen zonder aangepaste data-ophaalcode.&lt;/p&gt;
&lt;h2 id="github-copilot-in-ssms-22-is-nu-ga"&gt;GitHub Copilot in SSMS 22 is nu GA&lt;/h2&gt;
&lt;p&gt;Als je tijd doorbrengt in SQL Server Management Studio, is GitHub Copilot nu algemeen beschikbaar in SSMS 22. Dezelfde Copilot-ervaring die je al gebruikt in VS Code en Visual Studio, maar voor T-SQL.&lt;/p&gt;
&lt;p&gt;De praktische waarde is direct: op chat gebaseerde hulp bij het schrijven van query&amp;rsquo;s, refactoring van opgeslagen procedures, het oplossen van prestatieproblemen en beheertaken.&lt;/p&gt;
&lt;h2 id="vectorindexen-kregen-een-serieuze-upgrade"&gt;Vectorindexen kregen een serieuze upgrade&lt;/h2&gt;
&lt;p&gt;Azure SQL Database heeft nu snellere, capabelere vectorindexen met volledige ondersteuning voor invoegen, bijwerken en verwijderen. Dat betekent dat je vectorgegevens in real-time actueel blijven — geen batchherindexering nodig.&lt;/p&gt;
&lt;p&gt;Wat nieuw is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kwantisering&lt;/strong&gt; voor kleinere indexgroottes zonder te veel nauwkeurigheid te verliezen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iteratief filteren&lt;/strong&gt; voor preciezere resultaten&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tightere query-optimizer-integratie&lt;/strong&gt; voor voorspelbare prestaties&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Als je RAG doet met Azure SQL als vectoropslag, zijn deze verbeteringen direct bruikbaar.&lt;/p&gt;
&lt;h2 id="database-hub-in-fabric-agentisch-beheer"&gt;Database Hub in Fabric: agentisch beheer&lt;/h2&gt;
&lt;p&gt;Microsoft kondigde de &lt;strong&gt;Database Hub in Microsoft Fabric&lt;/strong&gt; aan (vroege toegang), die één venster biedt over Azure SQL, Cosmos DB, PostgreSQL, MySQL en SQL Server via Arc.&lt;/p&gt;
&lt;p&gt;AI-agents bewaken continu je database-omgeving, signaleren wat veranderd is, leggen uit waarom het belangrijk is en stellen voor wat je vervolgens moet doen.&lt;/p&gt;
&lt;h2 id="wat-dit-betekent-voor-net-ontwikkelaars"&gt;Wat dit betekent voor .NET-ontwikkelaars&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Probeer SQL MCP Server&lt;/strong&gt; als je AI-agents bouwt — de schoonste manier om agents databasetoegang te geven.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Schakel Copilot in SSMS in&lt;/strong&gt; als je dat nog niet hebt gedaan.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kijk naar vectorindexen&lt;/strong&gt; als je RAG doet en momenteel een aparte vectoropslag gebruikt.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Bekijk de &lt;a href="https://www.microsoft.com/en-us/sql-server/blog/2026/03/18/advancing-agentic-ai-with-microsoft-databases-across-a-unified-data-estate/"&gt;volledige aankondiging van Shireesh Thota&lt;/a&gt; en &lt;a href="https://aka.ms/database-hub"&gt;schrijf je in voor vroege toegang tot Database Hub&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Achtergrondreacties in Microsoft Agent Framework: Geen Timeout-angst Meer</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/</guid><description>Microsoft Agent Framework laat je nu langlopende AI-taken offloaden met vervolgingstokens. Zo werken achtergrondreacties en waarom ze belangrijk zijn voor je .NET-agents.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Als je ooit iets hebt gebouwd met redeneermodellen zoals o3 of GPT-5.2, ken je de pijn. Je agent begint een complexe taak te verwerken, de client zit te wachten en ergens treedt een verbindingstime-out op.&lt;/p&gt;
&lt;p&gt;Microsoft Agent Framework heeft zojuist &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;achtergrondreacties&lt;/a&gt; uitgebracht — en eerlijk gezegd is dit een van die functies die er vanaf dag één had moeten zijn.&lt;/p&gt;
&lt;h2 id="hoe-vervolgingstokens-werken"&gt;Hoe vervolgingstokens werken&lt;/h2&gt;
&lt;p&gt;In plaats van te blokkeren start je de agenttaak en krijg je een &lt;strong&gt;vervolgingstoken&lt;/strong&gt; terug. Denk eraan als een klaim-ticket bij een reparatiewinkel:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Stuur je verzoek met &lt;code&gt;AllowBackgroundResponses = true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Als de agent achtergrondverwerking ondersteunt, krijg je een vervolgingstoken&lt;/li&gt;
&lt;li&gt;Poll op je planning totdat het token &lt;code&gt;null&lt;/code&gt; terugkeert&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentRunOptions&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AllowBackgroundResponses&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentResponse&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;Write a detailed market analysis for the Q4 product launch.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TimeSpan&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FromSeconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="wanneer-dit-te-gebruiken"&gt;Wanneer dit te gebruiken&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Complexe redeneer taken&lt;/strong&gt; — meerstapsanalyse, diepgaand onderzoek&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lange contentgeneratie&lt;/strong&gt; — gedetailleerde rapporten, meerdelige documenten&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Onbetrouwbare netwerken&lt;/strong&gt; — mobiele clients, edge-implementaties&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asynchrone UX-patronen&lt;/strong&gt; — taak indienen, iets anders doen, terugkomen voor resultaten&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bekijk de &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;volledige documentatie&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Azure DevOps MCP Server Beschikbaar in Microsoft Foundry: Wat Dit Betekent voor je AI-Agents</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/</guid><description>De Azure DevOps MCP Server is nu beschikbaar in Microsoft Foundry. Verbind je AI-agents rechtstreeks met DevOps-workflows — werkitems, repos, pipelines — met een paar klikken.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;MCP (Model Context Protocol) heeft z&amp;rsquo;n moment. Als je het AI-agent-ecosysteem volgt, heb je waarschijnlijk MCP-servers overal zien opduiken.&lt;/p&gt;
&lt;p&gt;Nu is de &lt;a href="https://devblogs.microsoft.com/devops/remote-mcp-server-preview-in-microsoft-foundry/"&gt;Azure DevOps MCP Server beschikbaar in Microsoft Foundry&lt;/a&gt;, en dit is een van die integraties die je laat nadenken over de praktische mogelijkheden.&lt;/p&gt;
&lt;h2 id="wat-er-eigenlijk-gebeurt"&gt;Wat er eigenlijk gebeurt&lt;/h2&gt;
&lt;p&gt;Microsoft heeft de Azure DevOps MCP Server al uitgebracht als &lt;a href="https://devblogs.microsoft.com/devops/azure-devops-remote-mcp-server-public-preview"&gt;publieke preview&lt;/a&gt;. Nieuw is de Foundry-integratie. Je kunt de Azure DevOps MCP Server nu toevoegen aan je Foundry-agents rechtstreeks vanuit de toolcatalogus.&lt;/p&gt;
&lt;h2 id="instellen"&gt;Instellen&lt;/h2&gt;
&lt;p&gt;De instelling is verrassend eenvoudig:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ga in je Foundry-agent naar &lt;strong&gt;Tools toevoegen&lt;/strong&gt; &amp;gt; &lt;strong&gt;Catalogus&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Zoek op &amp;ldquo;Azure DevOps&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Selecteer de Azure DevOps MCP Server (preview) en klik op &lt;strong&gt;Aanmaken&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Voer je organisatienaam in en verbind&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="toegang-beheren"&gt;Toegang beheren&lt;/h2&gt;
&lt;p&gt;Je kunt opgeven welke tools beschikbaar zijn voor je agent. Principe van minste privileges, toegepast op je AI-agents.&lt;/p&gt;
&lt;h2 id="waarom-dit-interessant-is-voor-net-teams"&gt;Waarom dit interessant is voor .NET-teams&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sprint-planningsassistenten&lt;/strong&gt; — agents die werkitems ophalen en sprintcapaciteit voorstellen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code review-bots&lt;/strong&gt; — agents die PR-context begrijpen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Incident response&lt;/strong&gt; — agents die werkitems aanmaken en bugs correleren&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Onboarding&lt;/strong&gt; — echte antwoorden gebaseerd op projectdata&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="samenvatting"&gt;Samenvatting&lt;/h2&gt;
&lt;p&gt;Bekijk de &lt;a href="https://devblogs.microsoft.com/devops/remote-mcp-server-preview-in-microsoft-foundry/"&gt;volledige aankondiging&lt;/a&gt; voor details.&lt;/p&gt;</content:encoded></item><item><title>Foundry Agent Service is GA: Wat Er Echt Toe Doet voor .NET Agent-bouwers</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/</guid><description>Microsofts Foundry Agent Service is GA gegaan met privénetwerken, Voice Live, productieevaluaties en een open multi-model runtime.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Laten we eerlijk zijn — het bouwen van een AI-agentprototype is het gemakkelijke deel. Het moeilijke deel is alles erna.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;De Foundry Agent Service is GA gegaan&lt;/a&gt;, en deze release is precies gericht op die &amp;ldquo;alles erna&amp;rdquo;-kloof.&lt;/p&gt;
&lt;h2 id="gebouwd-op-de-responses-api"&gt;Gebouwd op de Responses API&lt;/h2&gt;
&lt;p&gt;De volgende generatie Foundry Agent Service is gebouwd op de OpenAI Responses API. De architectuur is bewust open — je bent niet gebonden aan één modelprovider.&lt;/p&gt;
&lt;h2 id="privénetwerken-de-enterprise-blokkade-verwijderd"&gt;Privénetwerken: de enterprise-blokkade verwijderd&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Geen publieke egress&lt;/strong&gt; — agentverkeer raakt nooit het openbare internet&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Container/subnet-injectie&lt;/strong&gt; in je netwerk&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Toolconnectiviteit inbegrepen&lt;/strong&gt; — MCP-servers, Azure AI Search via privépaden&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcp-authenticatie"&gt;MCP-authenticatie&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Auth-methode&lt;/th&gt;
&lt;th&gt;Wanneer te gebruiken&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sleutelgebaseerd&lt;/td&gt;
&lt;td&gt;Eenvoudige gedeelde toegang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Agent Identity&lt;/td&gt;
&lt;td&gt;Service-to-service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Managed Identity&lt;/td&gt;
&lt;td&gt;Per-project-isolatie&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OAuth Identity Passthrough&lt;/td&gt;
&lt;td&gt;Gebruikersdelegatie&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="voice-live"&gt;Voice Live&lt;/h2&gt;
&lt;p&gt;Voice Live vouwt STT, LLM en TTS samen in één beheerde API.&lt;/p&gt;
&lt;h2 id="evaluaties"&gt;Evaluaties&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Kant-en-klare evaluatoren&lt;/strong&gt; — coherentie, relevantie, grounding&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aangepaste evaluatoren&lt;/strong&gt; — je eigen bedrijfslogica&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Continue evaluatie&lt;/strong&gt; — steekproeven van live productieverkeer&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Bekijk de &lt;a href="https://learn.microsoft.com/azure/foundry/quickstarts/get-started-code"&gt;quickstart-gids&lt;/a&gt; en de &lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;GA-aankondiging&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Van Laptop naar Productie: AI-agents Implementeren naar Microsoft Foundry met Twee Opdrachten</title><link>https://thedotnetblog.com/nl/posts/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/nl/posts/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/</guid><description>De Azure Developer CLI heeft nu 'azd ai agent'-opdrachten die je AI-agent in minuten van lokale ontwikkeling naar een live Foundry-eindpunt brengen.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ken je die kloof tussen &amp;lsquo;het werkt op mijn machine&amp;rsquo; en &amp;lsquo;het is geïmplementeerd en verwerkt verkeer&amp;rsquo;? Voor AI-agents was die kloof pijnlijk breed.&lt;/p&gt;
&lt;p&gt;De Azure Developer CLI heeft dit een &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;zaak van twee opdrachten&lt;/a&gt; gemaakt.&lt;/p&gt;
&lt;h2 id="de-nieuwe-azd-ai-agent-workflow"&gt;De nieuwe &lt;code&gt;azd ai agent&lt;/code&gt; workflow&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 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;Dat is alles. &lt;code&gt;azd ai agent init&lt;/code&gt; maakt een infrastructuur-als-code-skelet in je repo, en &lt;code&gt;azd up&lt;/code&gt; richt alles in op Azure en publiceert je agent.&lt;/p&gt;
&lt;h2 id="wat-er-onder-de-motorkap-gebeurt"&gt;Wat er onder de motorkap gebeurt&lt;/h2&gt;
&lt;p&gt;De &lt;code&gt;init&lt;/code&gt;-opdracht genereert echte, inspecterbare Bicep-sjablonen in je repo — Foundry Resource, Foundry Project, modelimplementatieconfiguratie, beheerde identiteit met RBAC.&lt;/p&gt;
&lt;h2 id="dev-inner-loop"&gt;Dev inner loop&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 ai agent run &lt;span class="c1"&gt;# agent lokaal starten&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent invoke &lt;span class="c1"&gt;# testprompts sturen&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent monitor --follow &lt;span class="c1"&gt;# real-time logs streamen&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="de-volledige-opdrachtset"&gt;De volledige opdrachtset&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Opdracht&lt;/th&gt;
&lt;th&gt;Wat het doet&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;Foundry-agentproject scaffolden met IaC&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;Middelen inrichten en agent implementeren&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;Prompts sturen naar externe of lokale agent&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;Agent lokaal uitvoeren&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;Real-time logs streamen&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;Alle Azure-middelen opruimen&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Bekijk de &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;volledige walkthrough&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.112: Wat .NET-ontwikkelaars Eigenlijk Moeten Weten</title><link>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/vscode-1-112-dotnet-developers/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/vscode-1-112-dotnet-developers/</guid><description>VS Code 1.112 is net verschenen en zit vol met agentupgrades, een geïntegreerde browserdebugger, MCP-sandboxing en monorepo-ondersteuning. Dit is wat er echt toe doet als je met .NET bouwt.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Dit bericht is automatisch vertaald. Voor het origineel, &lt;a href="https://thedotnetblog.com/nl/posts/emiliano-montesdeoca/vscode-1-112-dotnet-developers/"&gt;klik hier&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;VS Code 1.112 is net geland, en eerlijk? Dit treft als je je dagen in .NET-land doorbrengt. Er staat veel in de &lt;a href="https://code.visualstudio.com/updates/v1_112"&gt;officiële releasenotes&lt;/a&gt;, maar laat me je wat scrollen besparen en focussen op wat er echt toe doet voor ons.&lt;/p&gt;
&lt;h2 id="copilot-cli-is-veel-nuttiger-geworden"&gt;Copilot CLI is veel nuttiger geworden&lt;/h2&gt;
&lt;p&gt;Het grote thema van deze release is &lt;strong&gt;agentautonomie&lt;/strong&gt; — Copilot meer ruimte geven om zijn werk te doen zonder dat je elke stap bewaakt.&lt;/p&gt;
&lt;h3 id="berichtsturen-en-wachtrij"&gt;Berichtsturen en wachtrij&lt;/h3&gt;
&lt;p&gt;Je kent dat moment waarop Copilot CLI midden in een taak zit en je realiseert dat je iets bent vergeten te vermelden? Eerder moest je wachten. Nu kun je berichten sturen terwijl een verzoek nog loopt — om de huidige respons bij te sturen of vervolgsinstructies in de wachtrij te zetten.&lt;/p&gt;
&lt;h3 id="machtigingsniveaus"&gt;Machtigingsniveaus&lt;/h3&gt;
&lt;p&gt;Dit is waar ik het meest enthousiast over ben. Copilot CLI-sessies ondersteunen nu drie machtigingsniveaus:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default Permissions&lt;/strong&gt; — de normale stroom waarbij tools om bevestiging vragen voordat ze worden uitgevoerd&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bypass Approvals&lt;/strong&gt; — keurt alles automatisch goed en probeert bij fouten opnieuw&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autopilot&lt;/strong&gt; — volledig autonoom: keurt tools goed, beantwoordt zijn eigen vragen en gaat door totdat de taak klaar is&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je kunt Autopilot inschakelen met de instelling &lt;code&gt;chat.autopilot.enabled&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="webapps-debuggen-zonder-vs-code-te-verlaten"&gt;Webapps debuggen zonder VS Code te verlaten&lt;/h2&gt;
&lt;p&gt;De geïntegreerde browser ondersteunt nu &lt;strong&gt;volledig debuggen&lt;/strong&gt;. Je kunt breakpoints instellen, door code stappen en variabelen inspecteren — allemaal in VS Code.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;editor-browser&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;request&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;launch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Debug Blazor App&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://localhost:5001&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Voor Blazor-ontwikkelaars is dit een game changer.&lt;/p&gt;
&lt;h2 id="mcp-server-sandboxing"&gt;MCP-server sandboxing&lt;/h2&gt;
&lt;p&gt;Als je MCP-servers gebruikt, kun je ze nu sandboxen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;servers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;my-azure-tools&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;node&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;./mcp-server.js&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;sandboxEnabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="monorepo-aanpassingen-ontdekken"&gt;Monorepo-aanpassingen ontdekken&lt;/h2&gt;
&lt;p&gt;Als je in een monorepo werkt, loopt VS Code met de instelling &lt;code&gt;chat.useCustomizationsInParentRepositories&lt;/code&gt; omhoog naar de &lt;code&gt;.git&lt;/code&gt;-root en ontdekt alles.&lt;/p&gt;
&lt;h2 id="troubleshoot-voor-agentdebugging"&gt;/troubleshoot voor agentdebugging&lt;/h2&gt;
&lt;p&gt;Heb je ooit aangepaste instructies of vaardigheden ingesteld en je afgevraagd waarom ze niet worden opgepikt? Schakel de nieuwe &lt;code&gt;/troubleshoot&lt;/code&gt;-vaardigheid in met:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;github.copilot.chat.agentDebugLog.enabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;github.copilot.chat.agentDebugLog.fileLogging.enabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="afsluiting"&gt;Afsluiting&lt;/h2&gt;
&lt;p&gt;VS Code 1.112 pusht hard op de agentervaring — meer autonomie, betere debugging, strakker beveiliging. &lt;a href="https://code.visualstudio.com/updates/v1_112"&gt;Download VS Code 1.112&lt;/a&gt; of update vanuit VS Code via &lt;strong&gt;Help &amp;gt; Check for Updates&lt;/strong&gt;.&lt;/p&gt;</content:encoded></item><item><title>Emiliano Montesdeoca</title><link>https://thedotnetblog.com/nl/authors/emiliano-montesdeoca/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thedotnetblog.com/nl/authors/emiliano-montesdeoca/</guid><description/><content:encoded/></item></channel></rss>