<?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>Dotnet | The .NET Blog</title><link>https://thedotnetblog.com/tr/tags/dotnet/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>tr</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Thu, 23 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/tr/tags/dotnet/index.xml" rel="self" type="application/rss+xml"/><item><title>Python, TypeScript ve .NET ile azd Hook Yazma: Shell Script'lere Veda</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/</guid><description>Azure Developer CLI artık Python, JavaScript, TypeScript veya .NET ile hook yazmayı destekliyor. Sadece bir migrasyon scripti çalıştırmak için Bash'e geçmek zorunda kalmayacaksınız.</description><content:encoded>&lt;p&gt;&lt;em&gt;Bu gönderi otomatik olarak çevrilmiştir. Orijinal sürüm için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Tamamen .NET ile yazılmış bir projeniz olmasına rağmen azd hook&amp;rsquo;ları için Bash scriptleri yazmak zorunda kaldıysanız, bu acıyı iyi biliyorsunuzdur. Projenin geri kalanı C# iken, neden bir pre-provisioning adımı için shell sözdizimine geçiş yapmak zorunda kalınsın?&lt;/p&gt;
&lt;p&gt;Bu hayal kırıklığı artık resmi bir çözüme kavuştu. Azure Developer CLI &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;hook&amp;rsquo;lar için çok dilli destek yayımladı&lt;/a&gt; ve tam olarak duyulduğu kadar iyi.&lt;/p&gt;
&lt;h2 id="hook-nedir"&gt;Hook nedir?&lt;/h2&gt;
&lt;p&gt;Hook&amp;rsquo;lar, &lt;code&gt;azd&lt;/code&gt; yaşam döngüsünün kritik noktalarında çalışan scriptlerdir — provisioning öncesi, deployment sonrası vb. &lt;code&gt;azure.yaml&lt;/code&gt; içinde tanımlanır ve CLI&amp;rsquo;yi değiştirmeden özel mantık eklemenizi sağlar.&lt;/p&gt;
&lt;p&gt;Önceden yalnızca Bash ve PowerShell destekleniyordu. Artık &lt;strong&gt;Python, JavaScript, TypeScript veya .NET&lt;/strong&gt; kullanılabilir — &lt;code&gt;azd&lt;/code&gt; geri kalanını otomatik olarak halleder.&lt;/p&gt;
&lt;h2 id="algılama-nasıl-çalışır"&gt;Algılama nasıl çalışır&lt;/h2&gt;
&lt;p&gt;Yalnızca hook&amp;rsquo;u bir dosyaya yönlendirin; &lt;code&gt;azd&lt;/code&gt; uzantıdan dili çıkarır:&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;Ek yapılandırma gerekmez. Uzantı belirsizse &lt;code&gt;kind: python&lt;/code&gt; (veya ilgili dil) ile açıkça belirtebilirsiniz.&lt;/p&gt;
&lt;h2 id="dile-göre-önemli-ayrıntılar"&gt;Dile göre önemli ayrıntılar&lt;/h2&gt;
&lt;h3 id="python"&gt;Python&lt;/h3&gt;
&lt;p&gt;Scriptin yanına (veya herhangi bir üst dizine) &lt;code&gt;requirements.txt&lt;/code&gt; ya da &lt;code&gt;pyproject.toml&lt;/code&gt; koyun. &lt;code&gt;azd&lt;/code&gt; otomatik olarak sanal ortam oluşturur, bağımlılıkları kurar ve scripti çalıştırır.&lt;/p&gt;
&lt;h3 id="javascript-ve-typescript"&gt;JavaScript ve TypeScript&lt;/h3&gt;
&lt;p&gt;Aynı desen — script yakınına &lt;code&gt;package.json&lt;/code&gt; koyun ve &lt;code&gt;azd&lt;/code&gt; önce &lt;code&gt;npm install&lt;/code&gt; çalıştırır. TypeScript için derleme adımı ve &lt;code&gt;tsconfig.json&lt;/code&gt; gerekmeden &lt;code&gt;npx tsx&lt;/code&gt; kullanılır.&lt;/p&gt;
&lt;h3 id="net"&gt;.NET&lt;/h3&gt;
&lt;p&gt;İki mod mevcuttur:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Proje modu&lt;/strong&gt;: Script yanında &lt;code&gt;.csproj&lt;/code&gt; varsa &lt;code&gt;azd&lt;/code&gt; otomatik olarak &lt;code&gt;dotnet restore&lt;/code&gt; ve &lt;code&gt;dotnet build&lt;/code&gt; çalıştırır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tek dosya modu&lt;/strong&gt;: .NET 10+ sürümünde bağımsız &lt;code&gt;.cs&lt;/code&gt; dosyaları &lt;code&gt;dotnet run script.cs&lt;/code&gt; ile doğrudan çalıştırılabilir. Proje dosyası gerekmez.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="executora-özgü-yapılandırma"&gt;Executor&amp;rsquo;a özgü yapılandırma&lt;/h2&gt;
&lt;p&gt;Her dil isteğe bağlı bir &lt;code&gt;config&lt;/code&gt; bloğunu destekler:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;hooks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/setup.ts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;packageManager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pnpm&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/migrate.cs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Release&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;framework&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;net10.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="net-geliştiricileri-için-önemi"&gt;.NET geliştiricileri için önemi&lt;/h2&gt;
&lt;p&gt;Hook&amp;rsquo;lar, azd tabanlı bir projede dil değiştirmeyi zorunlu kılan son yerdi. Artık uygulama kodu, altyapı scriptleri ve yaşam döngüsü hook&amp;rsquo;ları dahil tüm deployment pipeline&amp;rsquo;ı tek bir dilde yaşayabilir. Mevcut .NET yardımcı programlarını hook&amp;rsquo;larda yeniden kullanabilir, paylaşılan kütüphanelere referans verebilir ve shell script bakımından kurtulabilirsiniz.&lt;/p&gt;
&lt;h2 id="sonuç"&gt;Sonuç&lt;/h2&gt;
&lt;p&gt;Küçük görünse de azd günlük iş akışından çok fazla sürtünme kaldıran değişikliklerden biri. Hook&amp;rsquo;lar için çok dilli destek şu anda kullanılabilir — &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;resmi gönderi&lt;/a&gt;nde tam belgelere ulaşabilirsiniz.&lt;/p&gt;</content:encoded></item><item><title>Windows App Dev CLI v0.3: Terminalden F5 Hata Ayıklama ve Ajanlar için UI Otomasyonu</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/</guid><description>Windows App Development CLI v0.3, terminalden hata ayıklama başlatmak için winapp run, UI otomasyonu için winapp ui ve paketlenmiş uygulamalarla dotnet run'ı çalıştıran yeni bir NuGet paketi getiriyor.</description><content:encoded>&lt;p&gt;&lt;em&gt;Bu gönderi otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Visual Studio&amp;rsquo;nun F5 deneyimi harika. Ama yalnızca paketlenmiş bir Windows uygulamasını başlatıp hata ayıklamak için VS&amp;rsquo;yi açmak — bir CI boru hattında, otomatik bir iş akışında veya bir yapay zeka ajanı testleri çalıştırırken — fazla ağır bir yük.&lt;/p&gt;
&lt;p&gt;Windows App Development CLI v0.3 &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;yayınlandı&lt;/a&gt; ve bunu iki temel özellikle doğrudan ele alıyor: &lt;code&gt;winapp run&lt;/code&gt; ve &lt;code&gt;winapp ui&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="winapp-run-her-yerden-f5"&gt;winapp run: Her yerden F5&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;winapp run&lt;/code&gt; paketlenmemiş bir uygulama klasörü ve manifest alır; VS&amp;rsquo;nin hata ayıklama başlatmasında yaptığı her şeyi yapar: loose paket kaydeder, uygulamayı başlatır ve yeniden dağıtımlar arasında &lt;code&gt;LocalState&lt;/code&gt;&amp;lsquo;i korur.&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;# Uygulamayı derleyin, ardından paketlenmiş uygulama olarak çalıştırın&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;WinUI, WPF, WinForms, Console, Avalonia ve daha fazlası için çalışır. Modlar hem geliştiriciler hem de otomatik iş akışları için tasarlanmıştır:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--detach&lt;/code&gt;&lt;/strong&gt;: Başlatır ve hemen terminale kontrolü geri döndürür. CI için ideal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--unregister-on-exit&lt;/code&gt;&lt;/strong&gt;: Uygulama kapatıldığında kayıtlı paketi temizler.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--debug-output&lt;/code&gt;&lt;/strong&gt;: &lt;code&gt;OutputDebugString&lt;/code&gt; mesajlarını ve istisnaları gerçek zamanlı yakalar.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="yeni-nuget-paketi-paketlenmiş-uygulamalar-için-dotnet-run"&gt;Yeni NuGet Paketi: Paketlenmiş uygulamalar için dotnet run&lt;/h2&gt;
&lt;p&gt;.NET geliştiricileri için yeni bir NuGet paketi var: &lt;code&gt;Microsoft.Windows.SDK.BuildTools.WinApp&lt;/code&gt;. Kurulumdan sonra &lt;code&gt;dotnet run&lt;/code&gt; tüm iç döngüyü yönetir: derleme, loose-layout paketi hazırlama, Windows&amp;rsquo;ta kayıt ve başlatma — tek adımda.&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;# veya&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-komut-satırından-ui-otomasyonu"&gt;winapp ui: Komut satırından UI Otomasyonu&lt;/h2&gt;
&lt;p&gt;Bu, ajan senaryolarını açan özellik. &lt;code&gt;winapp ui&lt;/code&gt;, terminalden çalışan herhangi bir Windows uygulamasına (WPF, WinForms, Win32, Electron, WinUI3) tam UI Automation erişimi sağlar.&lt;/p&gt;
&lt;p&gt;Yapılabilecekler:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tüm üst düzey pencereleri listele&lt;/li&gt;
&lt;li&gt;Herhangi bir pencerenin tam UI Automation ağacında gezin&lt;/li&gt;
&lt;li&gt;Ad, tür veya otomasyon kimliğine göre öğe ara&lt;/li&gt;
&lt;li&gt;Tıkla, çağır ve değer ayarla&lt;/li&gt;
&lt;li&gt;Ekran görüntüsü al&lt;/li&gt;
&lt;li&gt;Öğelerin görünmesini bekle — test senkronizasyonu için ideal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;winapp ui&lt;/code&gt; ile &lt;code&gt;winapp run&lt;/code&gt;&amp;lsquo;ı birleştirmek, terminalden eksiksiz bir derleme → başlatma → doğrulama iş akışı sağlar. Bir ajan uygulamayı çalıştırabilir, UI durumunu inceleyebilir, programatik olarak etkileşime girebilir ve sonucu doğrulayabilir.&lt;/p&gt;
&lt;h2 id="diğer-yenilikler"&gt;Diğer yenilikler&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp unregister&lt;/code&gt;&lt;/strong&gt;: Tamamlandığında yandan yüklenmiş paketi kaldırır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp manifest add-alias&lt;/code&gt;&lt;/strong&gt;: Terminalden adıyla uygulama başlatmak için takma ad ekler.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sekme tamamlama&lt;/strong&gt;: PowerShell tamamlamayı tek komutla yapılandırın.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="nasıl-edinilir"&gt;Nasıl edinilir&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;# veya&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;CLI genel önizleme aşamasında. Tam belgeleme için &lt;a href="https://github.com/microsoft/WinAppCli"&gt;GitHub deposuna&lt;/a&gt;, tüm ayrıntılar için &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;orijinal duyuruya&lt;/a&gt; bakın.&lt;/p&gt;</content:encoded></item><item><title>Terminalinizi Serbest Bırakın: Aspire'ın Detached Modu İş Akışını Değiştiriyor</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/</guid><description>Aspire 13.2, AppHost'unuzu arka planda çalıştırmanıza ve terminalinizi geri almanıza olanak tanıyor. Yeni CLI komutları ve agent desteğiyle birlikte bu, göründüğünden çok daha büyük bir gelişme.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bir Aspire AppHost çalıştırdığınız her seferinde terminaliniz kayboluyor. Kilitli. Ctrl+C ile çıkana kadar meşgul. Hızlı bir komut çalıştırmanız mı gerekiyor? Yeni bir sekme açın. Logları kontrol etmek ister misiniz? Başka bir sekme. Bu küçük sürtünme hızla birikerek büyüyor.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 bunu düzeltiyor. James Newton-King &lt;a href="https://devblogs.microsoft.com/aspire/aspire-detached-mode-and-process-management/"&gt;tüm ayrıntıları yazdı&lt;/a&gt; ve dürüstçe söylemek gerekirse bu, çalışma şeklinizi anında değiştiren özelliklerden biri.&lt;/p&gt;
&lt;h2 id="detached-mod-bir-komut-terminal-geri"&gt;Detached mod: bir komut, terminal geri&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;Bu, &lt;code&gt;aspire run --detach&lt;/code&gt; için kısayol. AppHost&amp;rsquo;unuz arka planda başlıyor ve terminalinizi anında geri alıyorsunuz. Ekstra sekme yok. Terminal çoğullayıcı yok. Sadece prompt&amp;rsquo;unuz, hazır ve bekliyor.&lt;/p&gt;
&lt;h2 id="çalışanları-yönetmek"&gt;Çalışanları yönetmek&lt;/h2&gt;
&lt;p&gt;İşte şu an — arka planda çalıştırmak yalnızca orada ne olduğunu gerçekten yönetebiliyorsanız işe yarıyor. Aspire 13.2 tam bunun için eksiksiz bir CLI komut seti sunuyor:&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;# Çalışan tüm AppHost&amp;#39;ları listele&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;# Belirli bir AppHost&amp;#39;un durumunu incele&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;# Çalışan bir AppHost&amp;#39;tan log akışı al&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;# Belirli bir AppHost&amp;#39;u durdur&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;p&gt;Bu, Aspire CLI&amp;rsquo;ı gerçek anlamda bir süreç yöneticisine dönüştürüyor. Birden fazla AppHost başlatabilir, durumlarını kontrol edebilir, loglarını takip edebilir ve bunları kapatabilirsiniz — hepsi tek bir terminal oturumundan.&lt;/p&gt;
&lt;h2 id="isolated-modla-birleştirin"&gt;Isolated modla birleştirin&lt;/h2&gt;
&lt;p&gt;Detached mod, isolated modla doğal olarak uyum içinde çalışır. Port çakışması olmadan aynı projenin iki örneğini arka planda çalıştırmak ister misiniz?&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;Her biri rastgele portlar, ayrı secret&amp;rsquo;lar ve kendi yaşam döngüsü alıyor. Her ikisini görmek için &lt;code&gt;aspire ps&lt;/code&gt;, işi bitenini kapatmak için &lt;code&gt;aspire stop&lt;/code&gt; kullanın.&lt;/p&gt;
&lt;h2 id="bu-neden-kodlama-ajanları-için-büyük-bir-gelişme"&gt;Bu neden kodlama ajanları için büyük bir gelişme&lt;/h2&gt;
&lt;p&gt;İşte gerçekten ilgi çekici olan kısım. Terminalinizde çalışan bir kodlama ajanı artık şunları yapabiliyor:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;aspire start&lt;/code&gt; ile uygulamayı başlatmak&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aspire describe&lt;/code&gt; ile durumunu sorgulamak&lt;/li&gt;
&lt;li&gt;Sorunları teşhis etmek için &lt;code&gt;aspire logs&lt;/code&gt; ile logları kontrol etmek&lt;/li&gt;
&lt;li&gt;İşi bittiğinde &lt;code&gt;aspire stop&lt;/code&gt; ile durdurmak&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Terminal oturumunu kaybetmeden. Detached moddan önce, AppHost&amp;rsquo;unuzu çalıştıran bir ajan kendi terminaline erişimini kaybederdi. Artık başlatabilir, gözlemleyebilir, yineleyebilir ve temizleyebilir — tam olarak özerk bir ajanın çalışmasını isteyeceğiniz şekilde.&lt;/p&gt;
&lt;p&gt;Aspire ekibi bunu benimsedi. &lt;code&gt;aspire agent init&lt;/code&gt; çalıştırmak, ajanlara bu komutları öğreten bir Aspire skill dosyası kuruyor. Bu sayede Copilot&amp;rsquo;un kodlama ajanı gibi araçlar Aspire iş yüklerinizi kutudan çıkar çıkmaz yönetebiliyor.&lt;/p&gt;
&lt;h2 id="özet"&gt;Özet&lt;/h2&gt;
&lt;p&gt;Detached mod, basit bir bayrak kılığında gizlenmiş bir iş akışı yükseltmesi. Terminaller arasında bağlam geçişlerini bırakıyorsunuz, ajanlar kendilerini bloke etmekten kurtuluyor ve yeni CLI komutları çalışanlar hakkında gerçek görünürlük sağlıyor. Pratik, temiz ve günlük geliştirme döngüsünü belirgin biçimde daha akıcı hale getiriyor.&lt;/p&gt;
&lt;p&gt;Tüm ayrıntılar için &lt;a href="https://devblogs.microsoft.com/aspire/aspire-detached-mode-and-process-management/"&gt;tam yazıyı&lt;/a&gt; okuyun ve &lt;code&gt;aspire update --self&lt;/code&gt; ile Aspire 13.2&amp;rsquo;yi edinin.&lt;/p&gt;</content:encoded></item><item><title>.NET MAUI Maps'e Nihayet Pin Kümeleme Geldi — Tek Özellik, Sıfır Acı</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/maui-maps-pin-clustering-finally/</guid><description>.NET MAUI 11 Preview 3, Map kontrolüne yerel pin kümeleme ekliyor. Tek bir özellik, ayrı kümeleme grupları ve tap yönetimi — hepsi yerleşik.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/maui-maps-pin-clustering-finally/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yüz pin&amp;rsquo;li bir harita yüklediğinizde ve her şeyin okunaksız bir kümreye dönüştüğü o anı bilirsiniz, değil mi? Evet, .NET MAUI Maps deneyimi şimdiye kadar tam olarak buydu. Artık değil.&lt;/p&gt;
&lt;p&gt;David Ortinau, .NET MAUI 11 Preview 3&amp;rsquo;ün Android ve iOS/Mac Catalyst üzerinde kutudan çıkar çıkmaz pin kümeleme sunduğunu &lt;a href="https://devblogs.microsoft.com/dotnet/pin-clustering-in-dotnet-maui-maps/"&gt;duyurdu&lt;/a&gt;. Ve en iyi kısım — etkinleştirmek gülünç derecede basit.&lt;/p&gt;
&lt;h2 id="hepsini-yöneten-tek-özellik"&gt;Hepsini Yöneten Tek Özellik&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;Hepsi bu kadar. Yakın pinler, sayı rozeti olan kümeler halinde gruplanır. Yakınlaştırın ve genişlerler. Uzaklaştırın ve daralırlar. Kullanıcıların modern bir haritadan beklediği türden davranış — ve artık tek bir özellikle elde ediyorsunuz.&lt;/p&gt;
&lt;h2 id="bağımsız-kümeleme-grupları"&gt;Bağımsız Kümeleme Grupları&lt;/h2&gt;
&lt;p&gt;İşte ilginçleştiği yer burası. Tüm pinler birlikte kümelenmemelidir. Kahve dükkanları ve parklar farklı şeylerdir ve haritanız bunu bilmelidir.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ClusteringIdentifier&lt;/code&gt; özelliği, pinleri bağımsız gruplara ayırmanızı sağlar:&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;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;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;Occidental Square&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.6064&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.3325&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;parks&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;Aynı tanımlayıcıya sahip pinler birlikte kümelenir. Farklı tanımlayıcılar, coğrafi olarak yakın olsalar bile bağımsız kümeler oluşturur. Tanımlayıcı yok mu? Varsayılan grup. Temiz ve öngörülebilir.&lt;/p&gt;
&lt;h2 id="küme-taplarını-yönetme"&gt;Küme Tap&amp;rsquo;larını Yönetme&lt;/h2&gt;
&lt;p&gt;Bir kullanıcı kümeye dokunduğunda, ihtiyacınız olan her şeyle birlikte bir &lt;code&gt;ClusterClicked&lt;/code&gt; olayı alırsınız:&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;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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;names&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;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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Varsayılan kümeye-yakınlaştırma davranışını bastır:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// e.Handled = 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;p&gt;Olay argümanları size &lt;code&gt;Pins&lt;/code&gt; (kümedeki pinler), &lt;code&gt;Location&lt;/code&gt; (coğrafi merkez) ve &lt;code&gt;Handled&lt;/code&gt; (varsayılanı geçersiz kılmak istiyorsanız &lt;code&gt;true&lt;/code&gt; olarak ayarlayın) sunar. Basit, pratik, tam olarak beklediğiniz şey.&lt;/p&gt;
&lt;h2 id="bilmeye-değer-platform-ayrıntıları"&gt;Bilmeye Değer Platform Ayrıntıları&lt;/h2&gt;
&lt;p&gt;Android&amp;rsquo;de kümeleme, zoom değişikliklerinde yeniden hesaplanan özel ızgara tabanlı bir algoritma kullanır — harici bağımlılık yok. iOS ve Mac Catalyst&amp;rsquo;te, sorunsuz, platform-native animasyonlar anlamına gelen MapKit&amp;rsquo;ten yerel &lt;code&gt;MKClusterAnnotation&lt;/code&gt; desteğinden yararlanır.&lt;/p&gt;
&lt;p&gt;Bu, MAUI ekibinin doğru kararı verdiği durumlardan biri — mantıklı olduğunda platforma güvenmek.&lt;/p&gt;
&lt;h2 id="neden-önemli"&gt;Neden Önemli?&lt;/h2&gt;
&lt;p&gt;Pin kümeleme, .NET MAUI&amp;rsquo;de en çok talep edilen özelliklerden biri olmuştur (&lt;a href="https://github.com/dotnet/maui/issues/11811"&gt;issue #11811&lt;/a&gt;), ve bunun iyi bir nedeni var. Haritada konumları gösteren her uygulama — teslimat takibi, mağaza bulucu, gayrimenkul — buna ihtiyaç duyar. Daha önce bunu kendiniz oluşturmanız veya üçüncü taraf bir kütüphane getirmeniz gerekiyordu. Artık yerleşik.&lt;/p&gt;
&lt;p&gt;Cross-platform mobil uygulamalar geliştiren .NET geliştiricileri için bu, MAUI&amp;rsquo;yi harita yoğun senaryolar için gerçekten pratik bir tercih haline getiren türden bir yaşam kalitesi iyileştirmesi.&lt;/p&gt;
&lt;h2 id="başlarken"&gt;Başlarken&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://dotnet.microsoft.com/download/dotnet/11.0"&gt;.NET 11 Preview 3&lt;/a&gt;&amp;lsquo;ü kurun ve .NET MAUI iş yükünü güncelleyin. &lt;a href="https://github.com/dotnet/maui-samples/tree/main/10.0/UserInterface/Views/Map/MapDemo/WorkingWithMaps"&gt;Maps örneği&lt;/a&gt;, hemen oynayabileceğiniz yeni bir Clustering sayfası içeriyor.&lt;/p&gt;
&lt;p&gt;Gidin ve onunla bir şeyler oluşturun — haritalarınızın nihayet nefes almasına izin verin.&lt;/p&gt;</content:encoded></item><item><title>.NET Nisan 2026 Bakım Güncellemesi — Bugün Uygulamanız Gereken Güvenlik Yamaları</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/dotnet-april-2026-servicing-security-patches/</guid><description>Nisan 2026 bakım sürümü, .NET 10, .NET 9, .NET 8 ve .NET Framework genelinde 6 CVE'yi yamalıyor — iki uzaktan kod yürütme açığı da dahil olmak üzere.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/dotnet-april-2026-servicing-security-patches/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;.NET ve .NET Framework için &lt;a href="https://devblogs.microsoft.com/dotnet/dotnet-and-dotnet-framework-april-2026-servicing-updates/"&gt;Nisan 2026 bakım güncellemeleri&lt;/a&gt; yayımlandı ve bu sürüm yakında uygulamak isteyeceğiniz güvenlik düzeltmelerini içeriyor. İki uzaktan kod yürütme (RCE) açığı dahil olmak üzere altı CVE yamalandı.&lt;/p&gt;
&lt;h2 id="neler-yamalandı"&gt;Neler yamalandı&lt;/h2&gt;
&lt;p&gt;İşte hızlı özet:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CVE&lt;/th&gt;
&lt;th&gt;Tür&lt;/th&gt;
&lt;th&gt;Etkileyen&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;Güvenlik Özelliği Atlatma&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;Uzaktan Kod Yürütme&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;Uzaktan Kod Yürütme&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;Hizmet Reddi&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;Hizmet Reddi&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;Hizmet Reddi&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;p&gt;İki RCE CVE&amp;rsquo;si (CVE-2026-32178 ve CVE-2026-33116) en geniş .NET sürümü yelpazesini etkiliyor ve öncelikli olarak ele alınmalı.&lt;/p&gt;
&lt;h2 id="güncellenen-sürümler"&gt;Güncellenen sürümler&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;p&gt;Tümü olağan kanallar aracılığıyla mevcut — &lt;a href="https://dotnet.microsoft.com/download/dotnet/10.0"&gt;dotnet.microsoft.com&lt;/a&gt;, MCR&amp;rsquo;deki container imajları ve Linux paket yöneticileri.&lt;/p&gt;
&lt;h2 id="ne-yapmalısınız"&gt;Ne yapmalısınız&lt;/h2&gt;
&lt;p&gt;Projelerinizi ve CI/CD pipeline&amp;rsquo;larınızı en son yama sürümlerine güncelleyin. Container çalıştırıyorsanız, en son imajları çekin. .NET Framework kullanıyorsanız, ilgili yamalar için &lt;a href="https://learn.microsoft.com/dotnet/framework/release-notes/release-notes"&gt;.NET Framework sürüm notlarına&lt;/a&gt; bakın.&lt;/p&gt;
&lt;p&gt;Üretimde .NET 10 çalıştıranlar için (şu an güncel sürüm), 10.0.6 zorunlu bir güncellemedir. Bu LTS sürümlerindeyseniz .NET 9.0.15 ve .NET 8.0.26 için de aynısı geçerli. İki RCE açığı ertelenerek geçiştirilebilecek bir şey değildir.&lt;/p&gt;</content:encoded></item><item><title>Azure MCP Server 2.0 Yayınlandı — Self-Hosted Agentic Bulut Otomasyonu Artık Burada</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</guid><description>Azure MCP Server 2.0, self-hosted uzak dağıtımlar, 57 Azure servisi genelinde 276 araç ve kurumsal düzeyde güvenlikle kararlı sürüme ulaştı — agentic iş akışları geliştiren .NET geliştiricileri için önemli olan her şey burada.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Son zamanlarda MCP ve Azure ile bir şeyler geliştirdiyseniz, yerel deneyimin gayet iyi çalıştığını muhtemelen zaten biliyorsunuzdur. Bir MCP server bağlayın, AI agent&amp;rsquo;ınızın Azure kaynaklarıyla konuşmasına izin verin, devam edin. Ama bu kurulumu bir ekip genelinde paylaşmanız gerektiğinde? İşte orada işler karmaşıklaşıyordu.&lt;/p&gt;
&lt;p&gt;Artık değil. Azure MCP Server &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;2.0 kararlı sürüme ulaştı&lt;/a&gt; ve başlık özelliği tam olarak kurumsal ekiplerin istediği şey: &lt;strong&gt;self-hosted uzak MCP server desteği&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="azure-mcp-server-nedir"&gt;Azure MCP Server nedir?&lt;/h2&gt;
&lt;p&gt;Kısa bir hatırlatma. Azure MCP Server, &lt;a href="https://modelcontextprotocol.io/docs/getting-started/intro"&gt;Model Context Protocol&lt;/a&gt; spesifikasyonunu uygular ve Azure yeteneklerini AI agent&amp;rsquo;larının çağırabileceği yapılandırılmış, keşfedilebilir araçlar olarak sunar. Agent&amp;rsquo;ınız ile Azure arasında standartlaştırılmış bir köprü olarak düşünebilirsiniz — sağlama, dağıtım, izleme, tanılama, hepsi tek tutarlı bir arayüz üzerinden.&lt;/p&gt;
&lt;p&gt;Rakamlar kendisi konuşuyor: &lt;strong&gt;57 Azure servisi genelinde 276 MCP aracı&lt;/strong&gt;. Bu ciddi bir kapsam.&lt;/p&gt;
&lt;h2 id="büyük-haber-self-hosted-uzak-dağıtımlar"&gt;Büyük haber: self-hosted uzak dağıtımlar&lt;/h2&gt;
&lt;p&gt;Şöyle ki. MCP&amp;rsquo;yi kendi makinenizde yerel olarak çalıştırmak geliştirme ve deneyler için sorun değil. Ama gerçek bir ekip senaryosunda şunlara ihtiyacınız var:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Geliştiriciler ve dahili agent sistemleri için paylaşımlı erişim&lt;/li&gt;
&lt;li&gt;Merkezi yapılandırma (tenant bağlamı, abonelik varsayılanları, telemetri)&lt;/li&gt;
&lt;li&gt;Kurumsal ağ ve politika sınırları&lt;/li&gt;
&lt;li&gt;CI/CD pipeline&amp;rsquo;larına entegrasyon&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Azure MCP Server 2.0 tüm bunları ele alıyor. HTTP tabanlı taşıma, uygun kimlik doğrulama ve tutarlı yönetişimle merkezi olarak yönetilen bir dahili servis olarak dağıtabilirsiniz.&lt;/p&gt;
&lt;p&gt;Kimlik doğrulama için iki sağlam seçenek var:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Managed Identity&lt;/strong&gt; — &lt;a href="https://aka.ms/azmcp/self-host/foundry"&gt;Microsoft Foundry&lt;/a&gt; ile birlikte çalışırken&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;On-Behalf-Of (OBO) akışı&lt;/strong&gt; — Azure API&amp;rsquo;lerini oturum açmış kullanıcının bağlamını kullanarak çağıran OpenID Connect delegasyonu&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Bu OBO akışı, .NET geliştiricileri olarak bizim için özellikle ilginç. Agentic iş akışlarınızın aşırı ayrıcalıklı bir servis hesabı yerine kullanıcının gerçek izinleriyle çalışabileceği anlamına geliyor. En az ayrıcalık ilkesi, doğrudan yerleşik.&lt;/p&gt;
&lt;h2 id="güvenlik-güçlendirmesi"&gt;Güvenlik güçlendirmesi&lt;/h2&gt;
&lt;p&gt;Bu yalnızca bir özellik sürümü değil — aynı zamanda bir güvenlik sürümü. 2.0 sürümü şunları ekliyor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Daha güçlü endpoint doğrulaması&lt;/li&gt;
&lt;li&gt;Sorgu odaklı araçlarda injection kalıplarına karşı koruma&lt;/li&gt;
&lt;li&gt;Geliştirme ortamları için daha sıkı izolasyon kontrolleri&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MCP&amp;rsquo;yi paylaşımlı bir servis olarak sunacaksanız, bu güvenceler önemli. Çok önemli.&lt;/p&gt;
&lt;h2 id="nerede-kullanabilirsiniz"&gt;Nerede kullanabilirsiniz?&lt;/h2&gt;
&lt;p&gt;İstemci uyumluluk hikayesi geniş. Azure MCP Server 2.0 şunlarla çalışıyor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;IDE&amp;rsquo;ler&lt;/strong&gt;: VS Code, Visual Studio, IntelliJ, Eclipse, Cursor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CLI agent&amp;rsquo;ları&lt;/strong&gt;: GitHub Copilot CLI, Claude Code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bağımsız&lt;/strong&gt;: basit kurulumlar için yerel server&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-hosted uzak&lt;/strong&gt;: 2.0&amp;rsquo;ın yeni yıldızı&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ayrıca düzenlenmiş dağıtımlar için kritik olan Azure US Government ve 21Vianet tarafından işletilen Azure için sovereign bulut desteği de var.&lt;/p&gt;
&lt;h2 id="bu-net-geliştiricileri-için-neden-önemli"&gt;Bu .NET geliştiricileri için neden önemli&lt;/h2&gt;
&lt;p&gt;.NET ile agentic uygulamalar geliştiriyorsanız — ister Semantic Kernel, ister Microsoft Agent Framework, ister kendi orkestrasyon çözümünüz — Azure MCP Server 2.0, agent&amp;rsquo;larınızın Azure altyapısıyla etkileşime geçmesi için üretime hazır bir yol sunuyor. Özel REST wrapper&amp;rsquo;ları yok. Servise özgü entegrasyon kalıpları yok. Sadece MCP.&lt;/p&gt;
&lt;p&gt;Birkaç gün önce yayınlanan &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;MCP Apps için fluent API&lt;/a&gt; ile birleşince .NET MCP ekosistemi hızla olgunlaşıyor.&lt;/p&gt;
&lt;h2 id="başlarken"&gt;Başlarken&lt;/h2&gt;
&lt;p&gt;Kendi yolunuzu seçin:&lt;/p&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; — kaynak kodu, dokümantasyon, her şey&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; — container&amp;rsquo;lı dağıtım&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/vscode"&gt;VS Code Extension&lt;/a&gt;&lt;/strong&gt; — IDE entegrasyonu&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/self-host"&gt;Self-hosting rehberi&lt;/a&gt;&lt;/strong&gt; — 2.0&amp;rsquo;ın öne çıkan özelliği&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="sonuç"&gt;Sonuç&lt;/h2&gt;
&lt;p&gt;Azure MCP Server 2.0, demoda gösterişli görünmeyen ama pratikte her şeyi değiştiren altyapı yükseltmesi türünden. Uygun kimlik doğrulama, güvenlik güçlendirmesi ve sovereign bulut desteğiyle self-hosted uzak MCP, gerçek ekiplerin Azure üzerinde gerçek agentic iş akışları oluşturması için hazır olduğu anlamına geliyor. &amp;ldquo;Kurumsal kullanıma hazır&amp;rdquo; sinyalini bekliyordunuz — işte bu.&lt;/p&gt;</content:encoded></item><item><title>.NET Aspire 13.2 AI Ajanınızın En İyi Dostu Olmak İstiyor</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/</guid><description>Aspire 13.2 ajansal geliştirmeye tam anlamıyla odaklanıyor — yapılandırılmış CLI çıktısı, izole çalıştırmalar, otomatik iyileştirme ortamları ve tam OpenTelemetry verisi sayesinde AI ajanlarınız uygulamalarınızı gerçekten derleyip çalıştırabilir ve izleyebilir.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;AI kodlama ajanınızın sağlam bir kod yazdığı, heyecanlandığınız ve ardından uygulamayı çalıştırmaya çalışırken her şeyin dağıldığı o anı biliyor musunuz? Port çakışmaları, hayalet süreçler, yanlış ortam değişkenleri — ve bir anda ajanınız özellik geliştirmek yerine başlangıç sorunlarını çözmek için token harcamaya başlıyor.&lt;/p&gt;
&lt;p&gt;Aspire ekibi tam da bu sorun hakkında &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;gerçekten düşünceli bir yazı&lt;/a&gt; yayımladı ve cevapları ikna edici: Aspire 13.2 yalnızca insanlar için değil, AI ajanları için de tasarlanmış.&lt;/p&gt;
&lt;h2 id="sorun-gerçek"&gt;Sorun gerçek&lt;/h2&gt;
&lt;p&gt;AI ajanları kod yazmakta inanılmaz derecede başarılı. Ancak çalışan bir full-stack uygulama göndermek, dosya oluşturmaktan çok daha fazlasını gerektiriyor. Servisleri doğru sırayla başlatmanız, portları yönetmeniz, ortam değişkenlerini ayarlamanız, veritabanlarını bağlamanız ve bir şeyler bozulduğunda geri bildirim almanız gerekiyor. Şu an çoğu ajan bunların hepsini deneme-yanılma yoluyla hallediypr — komutları çalıştırıyor, hata çıktısını okuyor, yeniden deniyor.&lt;/p&gt;
&lt;p&gt;Markdown talimatları, özel skill&amp;rsquo;ler ve prompt&amp;rsquo;lar ekleyerek onlara rehberlik etmeye çalışıyoruz, ancak bunlar öngörülemez, derlenemiyor ve ayrıştırılmaları bile token harcıyor. Aspire ekibi temel içgörüyü doğru yakaladı: ajanların daha fazla Markdown&amp;rsquo;a değil, &lt;strong&gt;derleyicilere ve yapılandırılmış API&amp;rsquo;lara&lt;/strong&gt; ihtiyacı var.&lt;/p&gt;
&lt;h2 id="ajan-altyapısı-olarak-aspire"&gt;Ajan altyapısı olarak Aspire&lt;/h2&gt;
&lt;p&gt;Aspire 13.2&amp;rsquo;nin ajansal geliştirme masasına getirdikleri:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tüm yığınınız yazılı kodda.&lt;/strong&gt; AppHost, tam topolojinizi — API, frontend, veritabanı, önbellek — derlenebilir TypeScript veya C# olarak tanımlıyor:&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;Bir ajan, uygulama topolojisini anlamak, kaynak eklemek, bağlantıları oluşturmak ve &lt;em&gt;doğrulamak için derlemek&lt;/em&gt; amacıyla bunu okuyabilir. Derleyici bir şeyin yanlış olduğunu anında söylüyor. Tahmin yok, yapılandırma dosyalarıyla deneme-yanılma yok.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Her şeyi yöneten tek komut.&lt;/strong&gt; Ajanların &lt;code&gt;docker compose up&lt;/code&gt;, &lt;code&gt;npm run dev&lt;/code&gt; ve veritabanı başlangıç betikleri arasında denge kurması yerine tek yapmaları gereken şey &lt;code&gt;aspire start&lt;/code&gt;. Tüm kaynaklar doğru sırayla, doğru portlarda, doğru yapılandırmayla başlıyor. Uzun süre çalışan süreçler ajanı engellemez — bunları Aspire yönetiyor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paralel ajanlar için isolated mod.&lt;/strong&gt; &lt;code&gt;--isolated&lt;/code&gt; seçeneğiyle her Aspire çalıştırması kendi rastgele portlarını ve ayrı user secret&amp;rsquo;larını alıyor. Git worktree&amp;rsquo;lerinde çalışan birden fazla ajanınız mı var? Çakışmayacaklar. Bu, paralel ortamlar açan VS Code&amp;rsquo;un background agent&amp;rsquo;ları gibi araçlar için çok büyük bir gelişme.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Telemetri aracılığıyla ajan gözleri.&lt;/strong&gt; İşte burada gerçekten güçlü oluyor. Aspire CLI, geliştirme sırasında tam OpenTelemetry verilerini açığa çıkarıyor — trace&amp;rsquo;ler, metrikler, yapılandırılmış loglar. Ajanınız yalnızca konsol çıktısını okuyup en iyisini ummak zorunda değil. Başarısız bir isteği servisler arasında izleyebilir, yavaş endpoint&amp;rsquo;lerin profilini çıkarabilir ve neyin tam olarak nerede bozulduğunu saptayabilir. Bu, geliştirme döngüsünde üretim kalitesinde gözlemlenebilirlik demek.&lt;/p&gt;
&lt;h2 id="bowling-koruma-bandı-analojisi"&gt;Bowling koruma bandı analojisi&lt;/h2&gt;
&lt;p&gt;Aspire ekibi harika bir analoji kullanıyor: Aspire&amp;rsquo;ı AI ajanları için bowling koruma bantları olarak düşünün. Ajan mükemmel olmasa da (ve olmayacak), bantlar onu oluktan atmaktan koruyor. Yığın tanımı yanlış yapılandırmayı önlüyor, derleyici hataları yakalıyor, CLI süreç yönetimini üstleniyor ve telemetri geri bildirim döngüsünü sağlıyor.&lt;/p&gt;
&lt;p&gt;Bunu Playwright CLI gibi bir şeyle birleştirdiğinizde, ajanınız uygulamanızı gerçekten &lt;em&gt;kullanabilir&lt;/em&gt; — akışlara tıklayabilir, DOM&amp;rsquo;u kontrol edebilir, telemetride kırık şeyleri görebilir, kodu düzeltebilir, yeniden başlatabilir ve tekrar test edebilir. Derle, çalıştır, gözlemle, düzelt. Bu, peşinden koştuğumuz özerk geliştirme döngüsü.&lt;/p&gt;
&lt;h2 id="başlarken"&gt;Başlarken&lt;/h2&gt;
&lt;p&gt;Aspire&amp;rsquo;a yeni misiniz? CLI&amp;rsquo;ı &lt;a href="https://get.aspire.dev"&gt;get.aspire.dev&lt;/a&gt; adresinden yükleyin ve &lt;a href="https://aspire.dev/get-started/first-app"&gt;başlangıç rehberini&lt;/a&gt; takip edin.&lt;/p&gt;
&lt;p&gt;Zaten Aspire kullanıyor musunuz? 13.2&amp;rsquo;yi almak için &lt;code&gt;aspire update --self&lt;/code&gt; komutunu çalıştırın, ardından favori kodlama ajanınızı repoya yönlendirin. Aspire&amp;rsquo;ın koruma bantlarıyla ne kadar daha ileri gittiğini görünce şaşırabilirsiniz.&lt;/p&gt;
&lt;h2 id="özet"&gt;Özet&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 artık sadece bir dağıtık uygulama framework&amp;rsquo;ü değil — temel ajan altyapısına dönüşüyor. Yapılandırılmış yığın tanımları, tek komutla başlangıç, izole paralel çalıştırmalar ve gerçek zamanlı telemetri, AI ajanlarına kod yazmaktan uygulama göndermek için tam olarak ihtiyaç duydukları şeyleri veriyor.&lt;/p&gt;
&lt;p&gt;Tüm ayrıntılar ve demo videolar için Aspire ekibinin &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;tam yazısını&lt;/a&gt; okuyun.&lt;/p&gt;</content:encoded></item><item><title>Aspire'ın Isolated Modu Paralel Geliştirmedeki Port Çakışma Kabusu'nu Çözüyor</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/</guid><description>Aspire 13.2, --isolated modunu tanıtıyor: rastgele port ataması, ayrı secret'lar ve aynı AppHost'un birden fazla örneğini çalıştırırken sıfır çakışma. AI ajanları, worktree'ler ve paralel iş akışları için mükemmel.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aynı projenin iki örneğini aynı anda çalıştırmayı hiç denediniz mi? O acıyı bilirsiniz. Port 8080 zaten kullanımda. Port 17370 alınmış. Bir şeyleri kapatın, yeniden başlatın, ortam değişkenlerini dengeleyin — bu, üretkenliği mahveden bir durum.&lt;/p&gt;
&lt;p&gt;Bu sorun daha da kötüleşiyor, iyileşmiyor. AI ajanlar bağımsız çalışmak için git worktree&amp;rsquo;ler oluşturuyor. Background agent&amp;rsquo;lar ayrı ortamlar başlatıyor. Geliştiriciler özellik dalları için aynı repoyu iki kez checkout yapıyor. Bu senaryoların her biri aynı engelle karşılaşıyor: aynı uygulamanın iki örneği aynı portlar için çarpışıyor.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 bunu tek bir bayrakla çözüyor. Aspire ekibinden James Newton-King &lt;a href="https://devblogs.microsoft.com/aspire/aspire-isolated-mode-parallel-development/"&gt;tüm ayrıntıları yazdı&lt;/a&gt; ve bu, &amp;ldquo;bunu neden daha önce yoktu?&amp;rdquo; diye düşündüren özelliklerden biri.&lt;/p&gt;
&lt;h2 id="çözüm---isolated"&gt;Çözüm: &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;Hepsi bu. Her çalıştırma şunları alıyor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rastgele portlar&lt;/strong&gt; — örnekler arasında artık çakışma yok&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;İzole user secret&amp;rsquo;lar&lt;/strong&gt; — bağlantı dizeleri ve API anahtarları örnek başına ayrı kalıyor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Manuel port yeniden ataması yok. Ortam değişkeni dengeleme yok. Her çalıştırma otomatik olarak taze, çakışmasız bir ortam alıyor.&lt;/p&gt;
&lt;h2 id="bunun-parladığı-gerçek-senaryolar"&gt;Bunun parladığı gerçek senaryolar&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Çoklu checkout&amp;rsquo;lar.&lt;/strong&gt; Bir dizinde özellik dalı, başka bir dizinde hata düzeltmesi var:&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;Her ikisi de çakışma olmadan çalışıyor. Dashboard neyin nerede çalıştığını gösteriyor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;VS Code&amp;rsquo;daki background agent&amp;rsquo;lar.&lt;/strong&gt; Copilot Chat&amp;rsquo;in background agent&amp;rsquo;ı kodunuz üzerinde bağımsız çalışmak için bir git worktree oluşturduğunda, Aspire AppHost&amp;rsquo;unuzu çalıştırması gerekebilir. &lt;code&gt;--isolated&lt;/code&gt; olmadan, bu birincil worktree&amp;rsquo;nizle port çakışmasına yol açar. Bununla birlikte her iki örnek de çalışır.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;aspire agent init&lt;/code&gt; ile birlikte gelen Aspire skill&amp;rsquo;i, worktree&amp;rsquo;lerde çalışırken ajanlara otomatik olarak &lt;code&gt;--isolated&lt;/code&gt; kullanmalarını talimatlandırıyor. Dolayısıyla Copilot&amp;rsquo;un background agent&amp;rsquo;ı bunu kutudan çıkar çıkmaz halledebilmeli.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Geliştirmeyle eş zamanlı entegrasyon testleri.&lt;/strong&gt; Özellik geliştirmeye devam ederken canlı bir AppHost&amp;rsquo;a karşı test çalıştırmanız mı gerekiyor? Isolated mod, her bağlama kendi portlarını ve yapılandırmasını veriyor.&lt;/p&gt;
&lt;h2 id="arka-planda-nasıl-çalışıyor"&gt;Arka planda nasıl çalışıyor&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;--isolated&lt;/code&gt; geçirdiğinizde, CLI çalıştırma için benzersiz bir örnek kimliği oluşturuyor. Bu iki davranışı yönlendiriyor:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Port rastgeleleştirmesi&lt;/strong&gt; — AppHost yapılandırmanızda tanımlanan öngörülebilir portlara bağlanmak yerine, isolated mod her şey için — dashboard, servis endpoint&amp;rsquo;leri, hepsi — rastgele uygun portlar seçiyor. Servis keşfi otomatik olarak ayarlanıyor, bu nedenle servisler hangi portlara düşerlerse düşsünler birbirlerini buluyor.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Secret izolasyonu&lt;/strong&gt; — Her izole çalıştırma, örnek kimliğiyle anahtarlanan kendi user secret deposunu alıyor. Bir çalıştırmadan bağlantı dizeleri ve API anahtarları diğerine sızmıyor.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Kodunuzun değiştirilmesi gerekmiyor. Aspire&amp;rsquo;ın servis keşfi, endpoint&amp;rsquo;leri çalışma zamanında çözümlüyor, bu nedenle port atamasından bağımsız olarak her şey doğru şekilde bağlanıyor.&lt;/p&gt;
&lt;h2 id="ne-zaman-kullanmalı"&gt;Ne zaman kullanmalı&lt;/h2&gt;
&lt;p&gt;Aynı AppHost&amp;rsquo;un birden fazla örneğini aynı anda çalıştırırken &lt;code&gt;--isolated&lt;/code&gt; kullanın — ister paralel geliştirme, ister otomatik testler, ister AI ajanları, ister git worktree&amp;rsquo;ler olsun. Tahmin edilebilir portları tercih ettiğiniz tek örnekli geliştirme için, normal &lt;code&gt;aspire run&lt;/code&gt; hâlâ gayet iyi çalışıyor.&lt;/p&gt;
&lt;h2 id="özet"&gt;Özet&lt;/h2&gt;
&lt;p&gt;Isolated mod, gerçek ve giderek yaygınlaşan bir sorunu çözen küçük bir özellik. AI destekli geliştirme bizi daha fazla paralel iş akışına — birden fazla ajan, birden fazla worktree, birden fazla bağlam — doğru iterken, portlar için çakışmadan yeni bir örnek başlatabilme yeteneği vazgeçilmez hale geliyor.&lt;/p&gt;
&lt;p&gt;Tüm teknik ayrıntılar için &lt;a href="https://devblogs.microsoft.com/aspire/aspire-isolated-mode-parallel-development/"&gt;tam yazıyı&lt;/a&gt; okuyun ve 13.2&amp;rsquo;yi almak için &lt;code&gt;aspire update --self&lt;/code&gt; ile deneyin.&lt;/p&gt;</content:encoded></item><item><title>Azure Functions Üzerindeki MCP Server'larınızı Foundry Agent'larına Bağlayın — İşte Nasıl Yapılır</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/</guid><description>MCP server'ınızı bir kez oluşturun, Azure Functions'a dağıtın ve uygun auth ile Microsoft Foundry agent'larına bağlayın. Araçlarınız her yerde çalışır — VS Code, Cursor ve artık kurumsal AI agent'ları.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;MCP ekosistemi hakkında sevdiğim bir şey var: server&amp;rsquo;ınızı bir kez oluşturuyorsunuz ve her yerde çalışıyor. VS Code, Visual Studio, Cursor, ChatGPT — her MCP istemcisi araçlarınızı keşfedip kullanabiliyor. Şimdi Microsoft bu listeye bir tüketici daha ekliyor: Foundry agent&amp;rsquo;ları.&lt;/p&gt;
&lt;p&gt;Azure SDK ekibinden Lily Ma, Microsoft Foundry agent&amp;rsquo;larıyla Azure Functions&amp;rsquo;a dağıtılmış MCP server&amp;rsquo;larını bağlamaya dair &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;pratik bir kılavuz yayımladı&lt;/a&gt;. Zaten bir MCP server&amp;rsquo;ınız varsa, bu tamamen katma değer — yeniden yapılandırma gerekmiyor.&lt;/p&gt;
&lt;h2 id="bu-kombinasyon-neden-mantıklı"&gt;Bu Kombinasyon Neden Mantıklı?&lt;/h2&gt;
&lt;p&gt;Azure Functions, MCP server&amp;rsquo;larını barındırmak için ölçeklenebilir altyapı, yerleşik auth ve sunucusuz faturalama sunuyor. Microsoft Foundry ise akıl yürütebilen, plan yapabilen ve eylemler gerçekleştirebilen AI agent&amp;rsquo;ları sağlıyor. İkisini birleştirmek, özel araçlarınızın — veritabanı sorgulama, iş API&amp;rsquo;si çağrısı, doğrulama mantığı çalıştırma — kurumsal AI agent&amp;rsquo;larının özerk olarak keşfedip kullanabileceği yetenekler haline gelmesi anlamına geliyor.&lt;/p&gt;
&lt;p&gt;Önemli nokta: MCP server&amp;rsquo;ınız aynı kalıyor. Yalnızca Foundry&amp;rsquo;yi başka bir tüketici olarak ekliyorsunuz. VS Code kurulumunuzda çalışan araçların aynısı artık ekibinizin veya müşterilerinizin etkileşime girdiği bir AI agent&amp;rsquo;ına güç veriyor.&lt;/p&gt;
&lt;h2 id="kimlik-doğrulama-seçenekleri"&gt;Kimlik Doğrulama Seçenekleri&lt;/h2&gt;
&lt;p&gt;Yazının gerçek değer kattığı yer burası. Senaryonuza bağlı olarak dört auth yöntemi:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Yöntem&lt;/th&gt;
&lt;th&gt;Kullanım Senaryosu&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Key tabanlı&lt;/strong&gt; (varsayılan)&lt;/td&gt;
&lt;td&gt;Geliştirme veya Entra auth olmayan server&amp;rsquo;lar&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;Yönetilen kimliklerle üretim&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;Her kullanıcının bireysel olarak kimlik doğruladığı üretim&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Kimlik doğrulamasız&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Geliştirme/test veya yalnızca genel veriler&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Üretim için, agent kimliğiyle Microsoft Entra önerilen yoldur. OAuth identity passthrough, kullanıcı bağlamının önemli olduğu durumlar içindir — agent kullanıcıların giriş yapmasını ister ve her istek kullanıcının kendi token&amp;rsquo;ını taşır.&lt;/p&gt;
&lt;h2 id="kurulum"&gt;Kurulum&lt;/h2&gt;
&lt;p&gt;Üst düzey akış:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;MCP server&amp;rsquo;ınızı Azure Functions&amp;rsquo;a dağıtın&lt;/strong&gt; — &lt;a href="https://github.com/Azure-Samples/remote-mcp-functions-dotnet"&gt;.NET&lt;/a&gt;, Python, TypeScript ve Java için örnekler mevcut&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function app&amp;rsquo;inizde yerleşik MCP kimlik doğrulamasını etkinleştirin&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Endpoint URL&amp;rsquo;nizi alın&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;MCP server&amp;rsquo;ı Foundry&amp;rsquo;de araç olarak ekleyin&lt;/strong&gt; — portaldaki agent&amp;rsquo;ınıza gidin, yeni bir MCP aracı ekleyin, endpoint ve kimlik bilgilerini sağlayın&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ardından araçlarınızdan birini tetikleyecek bir prompt göndererek Agent Builder playground&amp;rsquo;unda test edin.&lt;/p&gt;
&lt;h2 id="değerlendirmem"&gt;Değerlendirmem&lt;/h2&gt;
&lt;p&gt;Buradaki kompozisyon hikayesi gerçekten güçleniyor. MCP server&amp;rsquo;ınızı .NET&amp;rsquo;te (veya Python, TypeScript, Java&amp;rsquo;da) bir kez oluşturun, Azure Functions&amp;rsquo;a dağıtın ve her MCP uyumlu istemci onu kullanabilsin — kodlama araçları, chat uygulamaları ve artık kurumsal AI agent&amp;rsquo;ları. Bu, gerçekten işleyen bir &amp;ldquo;bir kez yaz, her yerde kullan&amp;rdquo; pattern&amp;rsquo;ı.&lt;/p&gt;
&lt;p&gt;.NET geliştiricileri için özellikle, &lt;a href="https://github.com/Azure-Samples/remote-mcp-functions-dotnet"&gt;Azure Functions MCP extension&lt;/a&gt; bunu kolaylaştırıyor. Araçlarınızı Azure Functions olarak tanımlayın, dağıtın ve Azure Functions&amp;rsquo;ın sağladığı tüm güvenlik ve ölçeklendirme özellikleriyle birlikte üretim kalitesinde bir MCP server&amp;rsquo;ınız olsun.&lt;/p&gt;
&lt;h2 id="son-söz"&gt;Son Söz&lt;/h2&gt;
&lt;p&gt;Azure Functions üzerinde çalışan MCP araçlarınız varsa, bunları Foundry agent&amp;rsquo;larına bağlamak hızlı bir kazanımdır — özel araçlarınız, server&amp;rsquo;ın kendisinde hiçbir kod değişikliği yapmadan ve uygun auth ile kurumsal AI yeteneklerine dönüşür.&lt;/p&gt;
&lt;p&gt;Her kimlik doğrulama yöntemi için adım adım talimatlar için &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;tam kılavuzu&lt;/a&gt; okuyun ve üretim kurulumları için &lt;a href="https://learn.microsoft.com/azure/azure-functions/functions-mcp-foundry-tools?tabs=entra%2Cmcp-extension%2Cfoundry"&gt;ayrıntılı belgeleri&lt;/a&gt; inceleyin.&lt;/p&gt;</content:encoded></item><item><title>GitHub Copilot'un Modernizasyon Değerlendirmesi, Henüz Kullanmadığınız En İyi Göç Aracı</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/</guid><description>GitHub Copilot'un modernizasyon uzantısı yalnızca kod değişikliği önermekle kalmıyor — uygulanabilir sorunlar, Azure hedef karşılaştırmaları ve iş birliğine dayalı bir iş akışıyla eksiksiz bir göç değerlendirmesi üretiyor. Değerlendirme belgesinin neden her şeyin anahtarı olduğunu işte burada açıklıyoruz.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Eski bir .NET Framework uygulamasını modern .NET&amp;rsquo;e taşımak, herkesin yapması gerektiğini bildiği ama kimsenin başlamak istemediği işlerden biri. Bu hiçbir zaman sadece &amp;ldquo;hedef framework&amp;rsquo;ü değiştir&amp;rdquo; meselesi değildir. Ortadan kalkan API&amp;rsquo;lar, artık mevcut olmayan paketler, tamamen farklı çalışan hosting modelleri ve neyin container&amp;rsquo;a alınacağı, neyin yeniden yazılacağı, neyin olduğu gibi bırakılacağına dair binlerce küçük karar var.&lt;/p&gt;
&lt;p&gt;Jeffrey Fritz, &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;GitHub Copilot&amp;rsquo;un modernizasyon değerlendirmesine derin bir dalış&lt;/a&gt; yayımladı ve dürüst olmak gerekirse? Bu, .NET için gördüğüm en iyi göç araçları. Kod oluşturma nedeniyle değil — bu artık herkes için temel gereksinim. Ürettiği değerlendirme belgesi nedeniyle.&lt;/p&gt;
&lt;h2 id="bu-sadece-bir-kod-öneri-motoru-değil"&gt;Bu sadece bir kod öneri motoru değil&lt;/h2&gt;
&lt;p&gt;VS Code uzantısı bir &lt;strong&gt;Değerlendir → Planla → Uygula&lt;/strong&gt; modeli izliyor. Değerlendirme aşaması tüm kod tabanınızı analiz ediyor ve her şeyi yakalayan yapılandırılmış bir belge üretiyor: neyin değişmesi gerektiği, hangi Azure kaynaklarının sağlanacağı, hangi dağıtım modelinin kullanılacağı. Aşağıdaki her şey — altyapı-kodu, containerlaştırma, dağıtım manifestoları — değerlendirmenin bulduklarından akıyor.&lt;/p&gt;
&lt;p&gt;Değerlendirme, projenizde &lt;code&gt;.github/modernize/assessment/&lt;/code&gt; altında saklanıyor. Her çalıştırma bağımsız bir rapor üretiyor, böylece bir geçmiş oluşturabilir ve sorunları düzelttikçe göç pozisyonunuzun nasıl geliştiğini takip edebilirsiniz.&lt;/p&gt;
&lt;h2 id="başlamanın-iki-yolu"&gt;Başlamanın iki yolu&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Önerilen Değerlendirme&lt;/strong&gt; — hızlı yol. Seçilmiş alanlardan birini seçin (Java/.NET Yükseltme, Bulut Hazırlığı, Güvenlik) ve yapılandırmaya dokunmadan anlamlı sonuçlar alın. Uygulamanızın nerede durduğuna ilk bakış için harika.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Özel Değerlendirme&lt;/strong&gt; — hedefli yol. Neyin analiz edileceğini tam olarak yapılandırın: hedef hesaplama (App Service, AKS, Container Apps), hedef işletim sistemi, containerlaştırma analizi. Göç yaklaşımlarını yan yana karşılaştırmak için birden fazla Azure hedefi seçin.&lt;/p&gt;
&lt;p&gt;Bu karşılaştırma görünümü gerçekten yararlı. App Service için 3 zorunlu sorunu olan bir uygulamanın AKS için 7 sorunu olabilir. Her ikisini de görmek, bir göç yoluna bağlanmadan önce hosting kararını yönlendirmeye yardımcı oluyor.&lt;/p&gt;
&lt;h2 id="sorun-dökümü-uygulanabilir"&gt;Sorun dökümü uygulanabilir&lt;/h2&gt;
&lt;p&gt;Her sorun bir kritiklik düzeyiyle geliyor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zorunlu&lt;/strong&gt; — düzeltilmeli, yoksa göç başarısız olur&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Olası&lt;/strong&gt; — göçü etkileyebilir, insan değerlendirmesi gerektirir&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;İsteğe bağlı&lt;/strong&gt; — önerilen iyileştirmeler, göçü engellemez&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ve her sorun etkilenen dosyalara ve satır numaralarına bağlantı veriyor, neyin yanlış olduğunu ve neden hedef platformunuz için önemli olduğunu ayrıntılı açıklıyor, somut düzeltme adımları sunuyor (sadece &amp;ldquo;bunu düzelt&amp;rdquo; değil) ve resmi belgelere bağlantılar içeriyor.&lt;/p&gt;
&lt;p&gt;Bireysel sorunları geliştiricilere verebilir ve harekete geçmek için ihtiyaç duydukları her şeye sahip olurlar. Bu, &amp;ldquo;bir sorun var&amp;rdquo; diyen bir araç ile nasıl çözüleceğini söyleyen bir araç arasındaki farktır.&lt;/p&gt;
&lt;h2 id="kapsanan-yükseltme-yolları"&gt;Kapsanan yükseltme yolları&lt;/h2&gt;
&lt;p&gt;.NET için özellikle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;.NET Framework → .NET 10&lt;/li&gt;
&lt;li&gt;ASP.NET → ASP.NET Core&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Her yükseltme yolunun, hangi API&amp;rsquo;ların kaldırıldığını, hangi desenlerin doğrudan eşdeğerinin bulunmadığını ve hangi güvenlik sorunlarının ele alınması gerektiğini bilen algılama kuralları var.&lt;/p&gt;
&lt;p&gt;Birden fazla uygulamayı yöneten ekipler için çok-repo toplu değerlendirmeleri destekleyen bir CLI de var — tüm repoları klonlayın, hepsini değerlendirin, uygulama başına raporlar artı toplu portföy görünümü alın.&lt;/p&gt;
&lt;h2 id="benim-düşüncem"&gt;Benim düşüncem&lt;/h2&gt;
&lt;p&gt;Eski .NET Framework uygulamalarının üzerinde oturuyorsanız (ve gerçekçi olalım, çoğu kurumsal ekip oturuyor), bu başlamak için &lt;em&gt;tek&lt;/em&gt; araçtır. Değerlendirme belgesi tek başına zamana değer — belirsiz bir &amp;ldquo;modernize etmeliyiz&amp;quot;i, somut ve önceliklendirilmiş, net ileriye dönük yolları olan bir iş öğeleri listesine dönüştürür.&lt;/p&gt;
&lt;p&gt;İş birliğine dayalı iş akışı da akıllıca: değerlendirmeleri dışa aktarın, ekibinizle paylaşın, yeniden çalıştırmadan içe aktarın. Karar vericilerin araçları çalıştıranlar olmadığı mimari incelemeler? Karşılandı.&lt;/p&gt;
&lt;h2 id="sonuç"&gt;Sonuç&lt;/h2&gt;
&lt;p&gt;GitHub Copilot&amp;rsquo;un modernizasyon değerlendirmesi, .NET göçünü korkunç, tanımsız bir projeden yapılandırılmış, izlenebilir bir sürece dönüştürüyor. Nerede durduğunuzu görmek için önerilen değerlendirmeyle başlayın, ardından Azure hedeflerini karşılaştırmak ve göç planınızı oluşturmak için özel değerlendirmeleri kullanın.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;Tam anlatımı&lt;/a&gt; okuyun ve kendi kod tabanınızda denemek için &lt;a href="https://aka.ms/ghcp-appmod/vscode-ext"&gt;VS Code uzantısını&lt;/a&gt; alın.&lt;/p&gt;</content:encoded></item><item><title>MCP Uygulamaları Fluent API Kazandı — .NET'te Üç Adımda Zengin AI Araç Arayüzleri Oluşturun</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/</guid><description>Azure Functions'daki MCP Apps için yeni fluent yapılandırma API'si, herhangi bir .NET MCP aracını yalnızca birkaç satır kodla görünümler, izinler ve CSP politikaları olan tam bir uygulamaya dönüştürmenizi sağlar.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;MCP araçları, AI agent&amp;rsquo;larına yetenekler kazandırmak için harika. Peki ya aracınızın kullanıcıya bir şey göstermesi gerekiyorsa — bir dashboard, bir form, etkileşimli bir görselleştirme? MCP Apps tam bu noktada devreye giriyor ve çok daha kolay hale geldi.&lt;/p&gt;
&lt;p&gt;Azure SDK ekibinden Lilian Kasem, .NET Azure Functions&amp;rsquo;daki MCP Apps için &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;yeni fluent yapılandırma API&amp;rsquo;sini tanıttı&lt;/a&gt; ve bu, neden başından beri bu kadar basit olmadığını düşündüren türden bir geliştirici deneyimi iyileştirmesi.&lt;/p&gt;
&lt;h2 id="mcp-apps-nedir"&gt;MCP Apps Nedir?&lt;/h2&gt;
&lt;p&gt;MCP Apps, araçların kendi UI görünümlerini, statik varlıklarını ve güvenlik kontrollerini taşımasına izin vererek Model Context Protocol&amp;rsquo;ü genişletir. MCP aracınız yalnızca metin döndürmek yerine tam HTML deneyimleri render edebilir — etkileşimli dashboard&amp;rsquo;lar, veri görselleştirmeleri, yapılandırma formları — bunların hepsi AI agent&amp;rsquo;ları tarafından çağrılabilir ve MCP istemcileri tarafından kullanıcılara sunulur.&lt;/p&gt;
&lt;p&gt;Sorun şuydu: tüm bunları manuel olarak bağlamak MCP spesifikasyonunu yakından bilmeyi gerektiriyordu: &lt;code&gt;ui://&lt;/code&gt; URI&amp;rsquo;leri, özel mime türleri, araçlar ve kaynaklar arasında metadata koordinasyonu. Zor değil, ama zahmetli.&lt;/p&gt;
&lt;h2 id="üç-adımda-fluent-api"&gt;Üç Adımda Fluent API&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Adım 1: Fonksiyonunuzu tanımlayın.&lt;/strong&gt; Standart bir Azure Functions MCP aracı:&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;Adım 2: Bir MCP App&amp;rsquo;e yükseltin.&lt;/strong&gt; Program başlatmanızda:&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;Adım 3: HTML görünümünüzü ekleyin.&lt;/strong&gt; İhtiyacınız olan herhangi bir UI ile &lt;code&gt;assets/hello-app.html&lt;/code&gt; dosyasını oluşturun.&lt;/p&gt;
&lt;p&gt;Hepsi bu kadar. Fluent API tüm MCP spesifikasyon altyapısını halleder — sentetik kaynak fonksiyonu oluşturma, doğru mime türünü ayarlama, aracınızı görünümüne bağlayan metadata&amp;rsquo;yı ekleme.&lt;/p&gt;
&lt;h2 id="api-yüzeyi-iyi-tasarlanmış"&gt;API Yüzeyi İyi Tasarlanmış&lt;/h2&gt;
&lt;p&gt;Gerçekten beğendiğim birkaç şey:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Görünüm kaynakları esnektir.&lt;/strong&gt; HTML&amp;rsquo;i diskteki dosyalardan sunabilir veya kendi kendine yetişen dağıtımlar için kaynakları doğrudan assembly&amp;rsquo;nize gömebilirsiniz:&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;app&lt;/span&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="n"&gt;McpViewSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FromFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;assets/my-view.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="n"&gt;app&lt;/span&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="n"&gt;McpViewSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FromEmbeddedResource&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;MyApp.Resources.view.html&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;&lt;strong&gt;CSP kompozisyona uygundur.&lt;/strong&gt; Uygulamanızın ihtiyaç duyduğu kaynakları açıkça beyaz listeye alırsınız, en az ayrıcalık ilkelerini izleyerek. &lt;code&gt;WithCsp&lt;/code&gt;&amp;lsquo;yi birden fazla kez çağırın ve kaynaklar birikir:&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="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;ConnectTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://api.example.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;LoadResourcesFrom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://cdn.example.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;AllowFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://youtube.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;Görünürlük kontrolü.&lt;/strong&gt; Bir aracı yalnızca LLM&amp;rsquo;ye görünür, yalnızca host UI&amp;rsquo;a görünür veya her ikisine de görünür yapabilirsiniz. Yalnızca UI render eden ve model tarafından çağrılmaması gereken bir araç mı istiyorsunuz? Kolay:&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="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithVisibility&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;McpVisibility&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;)&lt;/span&gt; &lt;span class="c1"&gt;// Yalnızca UI, modelden gizli&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="başlarken"&gt;Başlarken&lt;/h2&gt;
&lt;p&gt;Preview paketini ekleyin:&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;Zaten Azure Functions ile MCP araçları oluşturuyorsanız, bu yalnızca bir paket güncellemesi. Konsepte yeniyseniz &lt;a href="https://learn.microsoft.com/azure/azure-functions/scenario-mcp-apps?tabs=bash%2Clinux&amp;amp;pivots=programming-language-csharp"&gt;MCP Apps hızlı başlangıç kılavuzu&lt;/a&gt; başlamak için en iyi yer.&lt;/p&gt;
&lt;h2 id="son-söz"&gt;Son Söz&lt;/h2&gt;
&lt;p&gt;MCP Apps, AI araçlama alanındaki daha heyecan verici gelişmelerden biri — yalnızca &lt;em&gt;işler yapan&lt;/em&gt; değil, kullanıcılara &lt;em&gt;şeyler gösterebilen&lt;/em&gt; araçlar. Fluent API protokol karmaşıklığını ortadan kaldırır ve önemli olan şeye odaklanmanızı sağlar: aracınızın mantığı ve UI&amp;rsquo;ı.&lt;/p&gt;
&lt;p&gt;Tam API referansı ve örnekler için &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;tam yazıyı&lt;/a&gt; okuyun.&lt;/p&gt;</content:encoded></item><item><title>C# 15 Union Türlerini Alıyor — ve Bunlar Tam İstediğimiz Şey</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/csharp-15-union-types-exhaustive-matching/</guid><description>C# 15, union anahtar sözcüğünü tanıtıyor — derleyici tarafından zorunlu kılınan kapsamlı desen eşleştirmeli discriminated union'lar. Nasıl göründükleri, neden önemli oldukları ve bugün nasıl deneyebileceğiniz burada.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/csharp-15-union-types-exhaustive-matching/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bunu bekliyordum. C# 15, &lt;code&gt;union&lt;/code&gt; anahtar sözcüğünü tanıtıyor — derleyici tarafından zorunlu kılınan kapsamlı desen eşleştirmeli gerçek discriminated union&amp;rsquo;lar. F#&amp;lsquo;ın discriminated union&amp;rsquo;larını ya da Rust&amp;rsquo;ın enum&amp;rsquo;larını hiç kıskandıysanız, bunun neden önemli olduğunu tam olarak biliyorsunuzdur.&lt;/p&gt;
&lt;p&gt;Bill Wagner, .NET bloğunda &lt;a href="https://devblogs.microsoft.com/dotnet/csharp-15-union-types/"&gt;konunun derinlemesine incelemesini yayımladı&lt;/a&gt; ve dürüst olmak gerekirse? Tasarım temiz, pratik ve son derece C# ruhuyla örtüşüyor. Gerçekte ne olduğunu ve neden ilk bakışta göründüğünden daha büyük bir mesele olduğunu size anlatayım.&lt;/p&gt;
&lt;h2 id="union-türlerinin-çözdüğü-sorun"&gt;Union türlerinin çözdüğü sorun&lt;/h2&gt;
&lt;p&gt;C# 15 öncesinde, bir metottan &amp;ldquo;birkaç olası türden biri&amp;rdquo; döndürmek her zaman bir uzlaşıydı:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;object&lt;/code&gt;&lt;/strong&gt; — kısıtlama yok, derleyici yardımı yok, her yerde savunmacı casting&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;İşaretçi arayüzler&lt;/strong&gt; — daha iyi, ama herkes bunları uygulayabilir. Derleyici kümenin tamamlanmış olduğunu asla kabul edemez&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Soyut taban sınıflar&lt;/strong&gt; — aynı sorun, üstelik türlerin ortak bir atası olması gerekiyor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bunların hiçbiri gerçekte istediğinizi vermiyor: derleyicinin her durumu ele aldığınızı garanti ettiği kapalı bir tür kümesi. Union türlerinin yaptığı tam olarak bu.&lt;/p&gt;
&lt;h2 id="sözdizimi-güzelce-basit"&gt;Sözdizimi güzelce basit&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;Tek satır. &lt;code&gt;Pet&lt;/code&gt;, bir &lt;code&gt;Cat&lt;/code&gt;, bir &lt;code&gt;Dog&lt;/code&gt; veya bir &lt;code&gt;Bird&lt;/code&gt; tutabilir. Örtülü dönüşümler otomatik olarak oluşturulur:&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;Pet&lt;/span&gt; &lt;span class="n"&gt;pet&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;Dog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Rex&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;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;pet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Dog { Name = Rex }&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ve işte sihir — derleyici kapsamlı eşleştirmeyi zorunlu kılıyor:&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;&lt;code&gt;_&lt;/code&gt; atma ifadesi gerekmiyor. Derleyici bu switch&amp;rsquo;in olası her durumu kapsadığını biliyor. Daha sonra union&amp;rsquo;a dördüncü bir tür eklerseniz, bunu ele almayan her switch ifadesi bir uyarı üretiyor. Eksik durumlar çalışma zamanında değil, derleme zamanında yakalanıyor.&lt;/p&gt;
&lt;h2 id="bu-pratikte-ne-anlama-geliyor"&gt;Bu pratikte ne anlama geliyor&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Pet&lt;/code&gt; örneği şirin, ama işte union&amp;rsquo;ların gerçek kodda asıl parladığı yer burası.&lt;/p&gt;
&lt;h3 id="farklı-şekiller-döndüren-api-yanıtları"&gt;Farklı şekiller döndüren API yanıtları&lt;/h3&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;Artık her tüketici başarı, hata ve doğrulama başarısızlığını ele almak zorunda. &amp;ldquo;Hata durumunu kontrol etmeyi unuttum&amp;rdquo; hataları artık yok.&lt;/p&gt;
&lt;h3 id="tek-değer-veya-koleksiyon"&gt;Tek değer veya koleksiyon&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;OneOrMore&amp;lt;T&amp;gt;&lt;/code&gt; deseni, union&amp;rsquo;ların yardımcı metotlarla nasıl bir gövdeye sahip olabileceğini gösteriyor:&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="n"&gt;union&lt;/span&gt; &lt;span class="n"&gt;OneOrMore&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;IEnumerable&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&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="n"&gt;IEnumerable&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;AsEnumerable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Value&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;T&lt;/span&gt; &lt;span class="n"&gt;single&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;single&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;IEnumerable&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;multiple&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;multiple&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="kc"&gt;null&lt;/span&gt; &lt;span class="p"&gt;=&amp;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&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;Çağıranlar hangi form uygunsa onu kullanıyor:&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;OneOrMore&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;dotnet&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;OneOrMore&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;moreTags&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="p"&gt;{&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;csharp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;unions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;preview&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="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsEnumerable&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;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$&amp;#34;[{tag}] &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="c1"&gt;// [dotnet]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ilgisiz-türleri-birleştirme"&gt;İlgisiz türleri birleştirme&lt;/h3&gt;
&lt;p&gt;Bu, geleneksel hiyerarşiler üzerindeki öldürücü özelliktir. Ortak atası olmayan türleri — &lt;code&gt;string&lt;/code&gt; ve &lt;code&gt;Exception&lt;/code&gt;, &lt;code&gt;int&lt;/code&gt; ve &lt;code&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/code&gt; — union&amp;rsquo;layabilirsiniz.&lt;/p&gt;
&lt;h2 id="mevcut-kütüphaneler-için-özel-unionlar"&gt;Mevcut kütüphaneler için özel union&amp;rsquo;lar&lt;/h2&gt;
&lt;p&gt;İşte akıllı bir tasarım seçimi: &lt;code&gt;[Union]&lt;/code&gt; özniteliğine sahip herhangi bir sınıf veya struct, temel deseni izlediği sürece (durum türleri için public constructor&amp;rsquo;lar ve bir &lt;code&gt;Value&lt;/code&gt; özelliği) bir union türü olarak tanınır. OneOf gibi union benzeri türler zaten sağlayan kütüphaneler, iç yapılarını yeniden yazmadan derleyici desteğini benimseyebilir.&lt;/p&gt;
&lt;p&gt;Değer türleriyle performans açısından kritik senaryolar için kütüphaneler, &lt;code&gt;HasValue&lt;/code&gt; ve &lt;code&gt;TryGetValue&lt;/code&gt; metotlarıyla boxing yapmayan erişim deseni uygulayabilir.&lt;/p&gt;
&lt;h2 id="büyük-resim"&gt;Büyük resim&lt;/h2&gt;
&lt;p&gt;Union türleri, C#&amp;lsquo;a gelen daha kapsamlı bir bütünlük hikayesinin parçası:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Union türleri&lt;/strong&gt; — kapalı bir tür kümesi üzerinde kapsamlı eşleştirme (şu an önizlemede mevcut)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kapalı hiyerarşiler&lt;/strong&gt; — &lt;code&gt;closed&lt;/code&gt; değiştiricisi, tanımlayan derleme dışında türetilmiş sınıfları engelliyor (önerildi)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kapalı enum&amp;rsquo;lar&lt;/strong&gt; — bildirilmiş üyeler dışında değer oluşturulmasını engelliyor (önerildi)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bu üç özellik birlikte, C#&amp;lsquo;a herhangi bir ana akım dilde en kapsamlı tür güvenli desen eşleştirme sistemlerinden birini kazandıracak.&lt;/p&gt;
&lt;h2 id="bugün-deneyin"&gt;Bugün deneyin&lt;/h2&gt;
&lt;p&gt;Union türleri .NET 11 Preview 2&amp;rsquo;de mevcut:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://dotnet.microsoft.com/download/dotnet"&gt;.NET 11 Preview SDK&lt;/a&gt;&amp;lsquo;yi yükleyin&lt;/li&gt;
&lt;li&gt;Projenizde &lt;code&gt;net11.0&lt;/code&gt; hedefleyin&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;LangVersion&amp;gt;preview&amp;lt;/LangVersion&amp;gt;&lt;/code&gt; ayarlayın&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Bir uyarı: Preview 2&amp;rsquo;de, henüz çalışma zamanında bulunmadıkları için &lt;code&gt;UnionAttribute&lt;/code&gt; ve &lt;code&gt;IUnion&lt;/code&gt;&amp;lsquo;ı projenizde bildirmeniz gerekecek. Docs reposundan &lt;a href="https://github.com/dotnet/docs/blob/e68b5dd1e557b53c45ca43e61b013bc919619fb9/docs/csharp/language-reference/builtin-types/snippets/unions/RuntimePolyfill.cs"&gt;RuntimePolyfill.cs&lt;/a&gt; dosyasını alın veya şunu ekleyin:&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="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;System.Runtime.CompilerServices&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="na"&gt; [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; AllowMultiple = false)]&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;sealed&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UnionAttribute&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Attribute&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="k"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;IUnion&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;object?&lt;/span&gt; &lt;span class="n"&gt;Value&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&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="sonuç"&gt;Sonuç&lt;/h2&gt;
&lt;p&gt;Union türleri, nasıl bu olmadan idare ettiğimizi merak ettiren özelliklerden biri. Derleyici tarafından zorunlu kılınan kapsamlı eşleştirme, temiz sözdizimi, generic desteği ve mevcut desen eşleştirmeyle entegrasyon — C# yolunda yapılmış, istediğimiz her şey bu.&lt;/p&gt;
&lt;p&gt;.NET 11 Preview 2&amp;rsquo;de deneyin, şeyleri kırın ve &lt;a href="https://github.com/dotnet/csharplang/discussions/9663"&gt;GitHub&amp;rsquo;da geri bildiriminizi paylaşın&lt;/a&gt;. Bu önizleme aşamasında ve C# ekibi aktif olarak dinliyor. Uç durumlarınız ve tasarım geri bildiriminiz nihai sürümü şekillendirecek.&lt;/p&gt;
&lt;p&gt;Tam dil referansı için &lt;a href="https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/union"&gt;union türleri belgelerine&lt;/a&gt; ve &lt;a href="https://learn.microsoft.com/dotnet/csharp/language-reference/proposals/unions"&gt;özellik spesifikasyonuna&lt;/a&gt; bakın.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 Bir Dokümantasyon CLI'ı Sunuyor — ve AI Ajanınız da Kullanabilir</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/</guid><description>.NET Aspire 13.2, aspire docs'u ekliyor — terminali terk etmeden resmi belgeleri aramanızı, gezmenizi ve okumanızı sağlayan bir CLI. AI ajanları için de araç olarak çalışıyor. Bunun neden önemli olduğunu burada açıklıyoruz.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bir Aspire AppHost&amp;rsquo;un içinde derinlere dalıp entegrasyonları bağlarken Redis entegrasyonunun tam olarak hangi parametreleri beklediğini kontrol etmeniz gereken o anı biliyor musunuz? Tarayıcınıza geçersiniz, aspire.dev&amp;rsquo;de arama yaparsınız, API dokümanlarını incelersiniz, sonra editörünüze dönersiniz. Bağlam kaybolmuş. Akış bozulmuş.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 tam da &lt;a href="https://devblogs.microsoft.com/aspire/aspire-docs-in-your-terminal/"&gt;bunun için bir çözüm sundu&lt;/a&gt;. &lt;code&gt;aspire docs&lt;/code&gt; CLI&amp;rsquo;ı, terminali terk etmeden resmi Aspire belgelerini doğrudan arayıp okuyabilmenizi sağlıyor. Yeniden kullanılabilir servisler tarafından desteklendiği için, AI ajanları ve skill&amp;rsquo;ler de var olmayan API&amp;rsquo;ları uydurmak yerine belge aramak amacıyla aynı komutları kullanabiliyor.&lt;/p&gt;
&lt;h2 id="bu-aslında-ne-sorunu-çözüyor"&gt;Bu aslında ne sorunu çözüyor&lt;/h2&gt;
&lt;p&gt;David Pine orijinal yazısında konuyu net olarak özetliyor: AI ajanlar, geliştiricilere Aspire uygulamaları geliştirmede yardım etmekte &lt;em&gt;berbattı&lt;/em&gt;. &lt;code&gt;aspire run&lt;/code&gt; yerine &lt;code&gt;dotnet run&lt;/code&gt; öneriyorlar, aspire.dev&amp;rsquo;deki belgeleri learn.microsoft.com&amp;rsquo;a yönlendiriyorlardı, güncel olmayan NuGet paketleri öneriyorlardı ve — kişisel favorim — var olmayan API&amp;rsquo;ları uyduruyorlardı.&lt;/p&gt;
&lt;p&gt;Neden? Çünkü Aspire, çok dilli olmadan çok daha uzun süre .NET&amp;rsquo;e özel kaldı ve LLM&amp;rsquo;ler en son özelliklerin öncesindeki eğitim verileriyle çalışıyor. Bir AI ajanına mevcut belgeleri gerçekten arama yeteneği verdiğinizde, tahmin etmeyi bırakıp işe yarar hale geliyor.&lt;/p&gt;
&lt;h2 id="üç-komut-sıfır-tarayıcı-sekmesi"&gt;Üç komut, sıfır tarayıcı sekmesi&lt;/h2&gt;
&lt;p&gt;CLI ferahlatıcı derecede basit:&lt;/p&gt;
&lt;h3 id="tüm-belgeleri-listele"&gt;Tüm belgeleri listele&lt;/h3&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 docs list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;aspire.dev&amp;rsquo;de mevcut her belge sayfasını döndürür. Makine tarafından okunabilir çıktı mı istiyorsunuz? &lt;code&gt;--format Json&lt;/code&gt; ekleyin.&lt;/p&gt;
&lt;h3 id="bir-konu-arayın"&gt;Bir konu arayın&lt;/h3&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 docs search &lt;span class="s2"&gt;&amp;#34;redis&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ağırlıklı ilgi puanlamasıyla hem başlıkları hem içeriği arar. Dahili olarak dokümantasyon araçlarını destekleyen arama motorunun aynısı. Başlıklar, slug&amp;rsquo;lar ve ilgi puanlarıyla sıralı sonuçlar alırsınız.&lt;/p&gt;
&lt;h3 id="tam-sayfayı-okuyun-ya-da-yalnızca-bir-bölümü"&gt;Tam sayfayı okuyun (ya da yalnızca bir bölümü)&lt;/h3&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 docs get redis-integration
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Tam sayfayı markdown olarak terminalinize akıtır. Yalnızca bir bölüme mi ihtiyacınız var?&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 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;p&gt;Cerrahi hassasiyet. 500 satır kaydırma yok. Sadece ihtiyacınız olan kısım.&lt;/p&gt;
&lt;h2 id="ai-ajan-boyutu"&gt;AI ajan boyutu&lt;/h2&gt;
&lt;p&gt;İşte AI araçlarıyla geliştirme yapan bizim için ilginç olan kısım. Aynı &lt;code&gt;aspire docs&lt;/code&gt; komutları, AI ajanları için araç olarak çalışıyor — skill&amp;rsquo;ler, MCP sunucuları veya basit CLI sarmalayıcıları aracılığıyla.&lt;/p&gt;
&lt;p&gt;AI asistanınızın eski eğitim verilerine dayalı Aspire API&amp;rsquo;ları uydurmak yerine, &lt;code&gt;aspire docs search &amp;quot;postgres&amp;quot;&lt;/code&gt; çağırabilir, resmi entegrasyon belgelerini bulabilir, doğru sayfayı okuyabilir ve size belgelenmiş yaklaşımı sunabilir. Gerçek zamanlı, güncel belgeler — modelin altı ay önce ezberledikleri değil.&lt;/p&gt;
&lt;p&gt;Bunun arkasındaki mimari kasıtlı. Aspire ekibi tek seferlik bir entegrasyon yerine yeniden kullanılabilir servisler (&lt;code&gt;IDocsIndexService&lt;/code&gt;, &lt;code&gt;IDocsSearchService&lt;/code&gt;, &lt;code&gt;IDocsFetcher&lt;/code&gt;, &lt;code&gt;IDocsCache&lt;/code&gt;) inşa etti. Bu, aynı arama motorunun terminaldeki insanlar, editörünüzdeki AI ajanları ve CI pipeline&amp;rsquo;ınızdaki otomasyonlar için çalışması anlamına geliyor.&lt;/p&gt;
&lt;h2 id="gerçek-dünya-senaryoları"&gt;Gerçek dünya senaryoları&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Hızlı terminal aramaları:&lt;/strong&gt; Üç dosya derindesiniz ve Redis yapılandırma parametrelerine ihtiyacınız var. İki komut, doksan saniye, işe geri dönüş:&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 docs search &lt;span class="s2"&gt;&amp;#34;redis&amp;#34;&lt;/span&gt; --limit &lt;span class="m"&gt;1&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;Configuration&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;AI destekli geliştirme:&lt;/strong&gt; VS Code skill&amp;rsquo;iniz CLI komutlarını sarmalıyor. &amp;ldquo;AppHost&amp;rsquo;uma bir PostgreSQL veritabanı ekle&amp;rdquo; diyorsunuz ve ajan cevap vermeden önce gerçek belgelere bakıyor. Halüsinasyon yok.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CI/CD doğrulama:&lt;/strong&gt; Pipeline&amp;rsquo;ınız, AppHost yapılandırmalarını programatik olarak resmi belgelerle doğruluyor. &lt;code&gt;--format Json&lt;/code&gt; çıktısı &lt;code&gt;jq&lt;/code&gt; ve diğer araçlara temiz şekilde aktarılıyor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Özel bilgi tabanları:&lt;/strong&gt; Kendi AI araçlarınızı mı geliştiriyorsunuz? Yapılandırılmış JSON çıktısını doğrudan bilgi tabanınıza aktarın:&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 docs search &lt;span class="s2"&gt;&amp;#34;monitoring&amp;#34;&lt;/span&gt; --format Json &lt;span class="p"&gt;|&lt;/span&gt; jq &lt;span class="s1"&gt;&amp;#39;[.[] | {slug, title, summary}]&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Web scraping yok. API anahtarı yok. Dokümantasyon araçlarının dahili olarak kullandığı aynı yapılandırılmış veri.&lt;/p&gt;
&lt;h2 id="belgeler-her-zaman-canlı"&gt;Belgeler her zaman canlı&lt;/h2&gt;
&lt;p&gt;En çok takdir ettiğim kısım bu. CLI bir anlık görüntü indirmiyor — aspire.dev&amp;rsquo;i ETag tabanlı önbelleklemeyle sorguluyor. Belgeler güncellenir güncellenmez, CLI&amp;rsquo;ınız ve üzerine inşa edilmiş tüm skill&amp;rsquo;ler bunu yansıtıyor. Eski kopyalar yok, &amp;ldquo;ama wiki şöyle diyordu&amp;hellip;&amp;rdquo; anları yok.&lt;/p&gt;
&lt;h2 id="özet"&gt;Özet&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;aspire docs&lt;/code&gt;, gerçek bir sorunu temiz biçimde çözen küçük özelliklerden biri. İnsanlar terminale özgü belge erişimi kazanıyor. AI ajanları tahmin etmeyi bırakıp gerçek belgelere başvurmanın bir yolunu buluyor. Ve hepsi aynı gerçek kaynakla destekleniyor.&lt;/p&gt;
&lt;p&gt;.NET Aspire ile geliştirme yapıyorsanız ve CLI&amp;rsquo;ı henüz denemediyseniz, &lt;code&gt;aspire docs search &amp;quot;konunuz&amp;quot;&lt;/code&gt; çalıştırın ve nasıl hissettirdiğini görün. Sonra bu komutları kullandığınız AI skill veya otomasyon kurulumuna entegre etmeyi düşünün — ajanlarınız size teşekkür edecek.&lt;/p&gt;
&lt;p&gt;Dokümantasyon araçlarının nasıl oluşturulduğuna dair &lt;a href="https://davidpine.dev/posts/aspire-docs-mcp-tools/"&gt;David Pine&amp;rsquo;ın derinlemesine incelemesine&lt;/a&gt; ve tüm ayrıntılar için &lt;a href="https://aspire.dev/reference/cli/commands/aspire-docs/"&gt;resmi CLI referansına&lt;/a&gt; göz atın.&lt;/p&gt;</content:encoded></item><item><title>Microsoft Agent Framework 1.0 Yayımlandı — .NET Geliştiricileri İçin Gerçekten Önemli Olan Şeyler</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/agent-framework-1-0-production-ready/</guid><description>Microsoft Agent Framework 1.0, kararlı API'lar, çoklu-agent orkestrasyonu ve tüm büyük AI sağlayıcıları için bağlayıcılarla üretime hazır hale geldi. Bir .NET geliştiricisi olarak bilmeniz gerekenler.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/agent-framework-1-0-production-ready/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Erken Semantic Kernel ve AutoGen günlerinden bu yana Agent Framework yolculuğunu takip ediyorsanız, bu gelişme önemli. Microsoft Agent Framework &lt;a href="https://devblogs.microsoft.com/agent-framework/microsoft-agent-framework-version-1-0/"&gt;1.0 sürümüne ulaştı&lt;/a&gt; — üretime hazır, kararlı API&amp;rsquo;lar, uzun vadeli destek taahhüdü. Hem .NET hem de Python için mevcut ve gerçek iş yükleri için gerçekten hazır.&lt;/p&gt;
&lt;p&gt;Duyuru gürültüsünü bir kenara bırakarak, .NET ile AI destekli uygulamalar geliştiriyorsanız önemli olan şeylere odaklanayım.&lt;/p&gt;
&lt;h2 id="özet"&gt;Özet&lt;/h2&gt;
&lt;p&gt;Agent Framework 1.0, eski Semantic Kernel ve AutoGen&amp;rsquo;i tek, açık kaynaklı bir SDK&amp;rsquo;da birleştirir. Tek bir agent soyutlaması. Tek bir orkestrasyon motoru. Birden fazla AI sağlayıcısı. Kurumsal desenler için Semantic Kernel ile araştırma düzeyindeki çoklu-agent iş akışları için AutoGen arasında gidip geliyorsanız, buna son verebilirsiniz. Artık tek SDK bu.&lt;/p&gt;
&lt;h2 id="başlamak-neredeyse-haksız-derecede-kolay"&gt;Başlamak neredeyse haksız derecede kolay&lt;/h2&gt;
&lt;p&gt;İşte .NET&amp;rsquo;te çalışan bir agent:&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;Bu kadar. Birkaç satırla Azure Foundry üzerinde çalışan bir AI agentınız var. Python karşılığı da aynı derecede özlü. İlerlediğinizde function araçları, çok turlu konuşmalar ve streaming ekleyin — API yüzeyi tuhaflaşmadan büyür.&lt;/p&gt;
&lt;h2 id="çoklu-agent-orkestrasyonu--işte-asıl-konu-bu"&gt;Çoklu-agent orkestrasyonu — işte asıl konu bu&lt;/h2&gt;
&lt;p&gt;Tek agentlar demolar için güzel, ama üretim senaryoları genellikle koordinasyon gerektirir. Agent Framework 1.0, Microsoft Research ve AutoGen&amp;rsquo;den gelen savaşta test edilmiş orkestrasyon desenlerini içerir:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sequential (Sıralı)&lt;/strong&gt; — agentlar sırayla işler (yazar → gözden geçiren → editör)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concurrent (Eş zamanlı)&lt;/strong&gt; — birden fazla agenta paralel olarak yayıl, sonuçları birleştir&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Handoff (Devir teslim)&lt;/strong&gt; — bir agent, niyete göre başka birine devreder&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Group chat (Grup sohbeti)&lt;/strong&gt; — birden fazla agent tartışır ve bir çözümde uzlaşır&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Magentic-One&lt;/strong&gt; — MSR&amp;rsquo;den araştırma düzeyindeki çoklu-agent deseni&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tümü streaming, checkpointing, human-in-the-loop onayları ve duraklat/devam et özelliklerini destekler. Checkpointing kısmı kritik — uzun süreli iş akışları süreç yeniden başlatmalarını atlatır. Azure Functions ile dayanıklı iş akışları geliştirmiş .NET geliştiricileri için bu tanıdık hissettiriyor.&lt;/p&gt;
&lt;h2 id="en-önemli-özellikler"&gt;En önemli özellikler&lt;/h2&gt;
&lt;p&gt;Bilmeye değer şeylerin kısa listesi:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Middleware kancaları.&lt;/strong&gt; ASP.NET Core&amp;rsquo;un middleware pipeline&amp;rsquo;ları var ya? Aynı kavram, ama agent yürütmesi için. Her aşamayı yakalayın — içerik güvenliği, loglama, uyumluluk politikaları ekleyin — agent prompt&amp;rsquo;larına dokunmadan. Agentları kurumsal düzeyde hazır kılmanın yolu budur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Takılabilir bellek.&lt;/strong&gt; Konuşma geçmişi, kalıcı anahtar-değer durumu, vektör tabanlı erişim. Backend&amp;rsquo;inizi seçin: Foundry Agent Service, Mem0, Redis, Neo4j veya kendinizinkini yazın. Bellek, durumsuz bir LLM çağrısını gerçekten bağlamı hatırlayan bir agenta dönüştüren şeydir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bildirimsel YAML agentları.&lt;/strong&gt; Agentınızın talimatlarını, araçlarını, belleğini ve orkestrasyon topolojisini sürüm kontrollü YAML dosyalarında tanımlayın. Tek bir API çağrısıyla yükleyin ve çalıştırın. Bu, kod yeniden dağıtmadan agent davranışını yinelemek isteyen ekipler için oyun değiştiricidir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A2A ve MCP desteği.&lt;/strong&gt; MCP (Model Context Protocol), agentların harici araçları dinamik olarak keşfetmesine ve çağırmasına izin verir. A2A (Agent-to-Agent protokolü), çalışma zamanları arası işbirliğini mümkün kılar — .NET agentlarınız diğer framework&amp;rsquo;lerde çalışan agentlarla koordinasyon kurabilir. A2A 1.0 desteği yakında geliyor.&lt;/p&gt;
&lt;h2 id="takip-etmeye-değer-önizleme-özellikleri"&gt;Takip etmeye değer önizleme özellikleri&lt;/h2&gt;
&lt;p&gt;Bazı özellikler 1.0&amp;rsquo;da önizleme olarak yayımlandı — işlevsel ama API&amp;rsquo;lar gelişebilir:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DevUI&lt;/strong&gt; — agent yürütmesini, mesaj akışlarını ve araç çağrılarını gerçek zamanlı olarak görselleştirmek için tarayıcı tabanlı yerel hata ayıklayıcı. Application Insights gibi ama agent muhakemesi için.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub Copilot SDK ve Claude Code SDK&lt;/strong&gt; — Copilot veya Claude&amp;rsquo;u doğrudan orkestrasyon kodunuzdan agent harness&amp;rsquo;i olarak kullanın. Kod yazabilen bir agentı aynı iş akışındaki diğer agentlarla birleştirin.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent Harness&lt;/strong&gt; — agentlara shell, dosya sistemi ve mesajlaşma döngülerine erişim sağlayan özelleştirilebilir yerel çalışma zamanı. Kodlama agentları ve otomasyon desenlerini düşünün.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skills&lt;/strong&gt; — agentlara kullanıma hazır yapılandırılmış yetenekler sunan yeniden kullanılabilir alan yetkinliği paketleri.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="semantic-kernel-veya-autogenden-geçiş"&gt;Semantic Kernel veya AutoGen&amp;rsquo;den geçiş&lt;/h2&gt;
&lt;p&gt;Mevcut Semantic Kernel veya AutoGen kodunuz varsa, kodunuzu analiz eden ve adım adım geçiş planları üreten özel geçiş asistanları mevcuttur. &lt;a href="https://learn.microsoft.com/en-us/agent-framework/migration-guide/from-semantic-kernel"&gt;Semantic Kernel geçiş rehberi&lt;/a&gt; ve &lt;a href="https://learn.microsoft.com/en-us/agent-framework/migration-guide/from-autogen"&gt;AutoGen geçiş rehberi&lt;/a&gt; her şeyi adım adım anlatıyor.&lt;/p&gt;
&lt;p&gt;RC paketlerindeyseniz, 1.0&amp;rsquo;a yükseltme sadece bir sürüm güncellemesidir.&lt;/p&gt;
&lt;h2 id="sonuç"&gt;Sonuç&lt;/h2&gt;
&lt;p&gt;Agent Framework 1.0, kurumsal ekiplerin beklediği üretim mihenk taşıdır. Kararlı API&amp;rsquo;lar, çoklu sağlayıcı desteği, gerçek ölçekte çalışan orkestrasyon desenleri ve hem Semantic Kernel hem de AutoGen&amp;rsquo;den geçiş yolları.&lt;/p&gt;
&lt;p&gt;Framework &lt;a href="https://github.com/microsoft/agent-framework"&gt;GitHub&amp;rsquo;da tamamen açık kaynak&lt;/a&gt; ve &lt;code&gt;dotnet add package Microsoft.Agents.AI&lt;/code&gt; ile bugün başlayabilirsiniz. Ellerinizi kirletmek için &lt;a href="https://learn.microsoft.com/en-us/agent-framework/get-started/"&gt;hızlı başlangıç rehberine&lt;/a&gt; ve &lt;a href="https://github.com/microsoft/agent-framework"&gt;örneklere&lt;/a&gt; göz atın.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Üretimde kullanmak güvenli&amp;rdquo; sinyalini bekliyorsanız — işte bu.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 Dashboard'una Telemetri API'si Geldi — ve Her Şeyi Değiştiriyor</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/aspire-132-dashboard-export-telemetry/</guid><description>.NET Aspire 13.2, daha akıllı telemetri dışa aktarma, izler ve loglar için programlanabilir bir API ve GenAI görselleştirme iyileştirmeleri sunuyor. Bunun hata ayıklama iş akışınız için neden önemli olduğu.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/aspire-132-dashboard-export-telemetry/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;.NET Aspire ile dağıtık uygulamalar geliştiriyorsanız, dashboard&amp;rsquo;un tüm deneyimin en iyi parçası olduğunu zaten bilirsiniz. Tüm izleriniz, loglarınız ve metrikleriniz tek bir yerde — harici Jaeger yok, Seq kurulumu yok, &amp;ldquo;öbür terminale bakayım&amp;rdquo; anı yok.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 bunu önemli ölçüde daha iyi hale getirdi. James Newton-King &lt;a href="https://devblogs.microsoft.com/aspire/aspire-dashboard-improvements-export-and-telemetry/"&gt;güncellemeyi duyurdu&lt;/a&gt; ve dürüst olmak gerekirse? Telemetri dışa aktarma ve API özellikleri tek başına yükseltmeye değer.&lt;/p&gt;
&lt;h2 id="telemetriyi-sağlıklı-bir-şekilde-dışa-aktarın"&gt;Telemetriyi sağlıklı bir şekilde dışa aktarın&lt;/h2&gt;
&lt;p&gt;Hepimizin yaşadığı senaryoyu düşünün: dağıtık bir sorunu ayıklıyorsunuz, yirmi dakikalık kurulumun ardından sonunda yeniden üretiyorsunuz ve şimdi yaşananları ekibinizle paylaşmanız gerekiyor. Önceden? Ekran görüntüleri. İz ID&amp;rsquo;lerini kopyala-yapıştır. Her zamanki karmaşa.&lt;/p&gt;
&lt;p&gt;Aspire 13.2, şunları yapabileceğiniz uygun bir &lt;strong&gt;Logları ve telemetriyi yönet&lt;/strong&gt; iletişim kutusu ekliyor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tüm telemetriyi temizleme (yeniden üretim denemesinden önce kullanışlı)&lt;/li&gt;
&lt;li&gt;Seçili telemetriyi standart OTLP/JSON formatında ZIP dosyasına dışa aktarma&lt;/li&gt;
&lt;li&gt;Bu ZIP&amp;rsquo;i daha sonra herhangi bir Aspire dashboard&amp;rsquo;una yeniden içe aktarma&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Son kısım öldürücü özellik. Bir hatayı yeniden üretirsiniz, telemetriyi dışa aktarırsınız, iş öğenize eklersiniz ve ekip arkadaşınız tam olarak gördüğünüzü görmek için kendi dashboard&amp;rsquo;una içe aktarabilir. Artık &amp;ldquo;kendi makinende yeniden üretebilir misin?&amp;rdquo; yok.&lt;/p&gt;
&lt;p&gt;Bireysel izler, span&amp;rsquo;lar ve loglar da bağlam menülerinde &amp;ldquo;JSON Dışa Aktar&amp;rdquo; seçeneği kazanıyor. Tek bir izi paylaşmanız mı gerekiyor? Sağ tıklayın, JSON kopyalayın, PR açıklamanıza yapıştırın. Tamam.&lt;/p&gt;
&lt;h2 id="telemetri-apisi-gerçek-oyun-değiştirici"&gt;Telemetri API&amp;rsquo;si gerçek oyun değiştirici&lt;/h2&gt;
&lt;p&gt;En çok bu konuya heyecanlıyım. Dashboard artık telemetri verilerini programatik olarak sorgulamak için &lt;code&gt;/api/telemetry&lt;/code&gt; altında bir HTTP API sunuyor. Kullanılabilir endpoint&amp;rsquo;ler:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/resources&lt;/code&gt; — telemetrisi olan kaynakları listele&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/spans&lt;/code&gt; — filtrelerle span&amp;rsquo;ları sorgula&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/logs&lt;/code&gt; — filtrelerle logları sorgula&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/traces&lt;/code&gt; — izleri listele&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/traces/{traceId}&lt;/code&gt; — belirli bir iz için tüm span&amp;rsquo;ları getir&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Her şey OTLP JSON formatında dönüyor. Bu, yeni &lt;code&gt;aspire agent mcp&lt;/code&gt; ve &lt;code&gt;aspire otel&lt;/code&gt; CLI komutlarını besliyor, ama gerçek anlam daha büyük: artık uygulamanızın telemetrisini doğrudan sorgulayan araçlar, scriptler ve AI agent entegrasyonları oluşturabilirsiniz.&lt;/p&gt;
&lt;p&gt;Hata ayıklarken gerçek dağıtık izlerinize bakabilen bir AI kodlama agentı hayal edin. Bu artık hayali değil — bu API&amp;rsquo;nin mümkün kıldığı şey tam olarak bu.&lt;/p&gt;
&lt;h2 id="genai-telemetri-pratikleşiyor"&gt;GenAI telemetri pratikleşiyor&lt;/h2&gt;
&lt;p&gt;Semantic Kernel veya Microsoft.Extensions.AI ile AI destekli uygulamalar geliştiriyorsanız, geliştirilmiş GenAI telemetri görselleştiricisini takdir edeceksiniz. Aspire 13.2 şunları ekliyor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Markdown olarak render edilen AI araç açıklamaları&lt;/li&gt;
&lt;li&gt;AI iz erişimini hızlandırmak için izler sayfasında özel GenAI butonu&lt;/li&gt;
&lt;li&gt;Kesik veya standart olmayan GenAI JSON için daha iyi hata yönetimi&lt;/li&gt;
&lt;li&gt;Araç tanımları arasında tıkla-vurgula navigasyonu&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Blog yazısı, VS Code Copilot chat, Copilot CLI ve OpenCode&amp;rsquo;un tümünün &lt;code&gt;OTEL_EXPORTER_OTLP_ENDPOINT&lt;/code&gt; yapılandırmasını desteklediğinden bahsediyor. Bunları Aspire dashboard&amp;rsquo;una yönlendirin ve AI agentlarınızın telemetri aracılığıyla gerçek zamanlı olarak nasıl düşündüğünü izleyebilirsiniz. Bu, başka hiçbir yerde bulamayacağınız bir hata ayıklama deneyimidir.&lt;/p&gt;
&lt;h2 id="sonuç"&gt;Sonuç&lt;/h2&gt;
&lt;p&gt;Aspire 13.2, dashboard&amp;rsquo;u &amp;ldquo;güzel bir hata ayıklama arayüzü&amp;quot;nden &amp;ldquo;programlanabilir bir gözlemlenebilirlik platformu&amp;quot;na taşıyor. Dışa aktarma/içe aktarma iş akışı tek başına dağıtık hata ayıklamada gerçek zaman kazandırıyor; telemetri API&amp;rsquo;si ise AI destekli tanılama kapısını açıyor.&lt;/p&gt;
&lt;p&gt;Zaten Aspire kullanıyorsanız, yükseltin. Kullanmıyorsanız — bu, &lt;a href="https://aspire.dev"&gt;aspire.dev&lt;/a&gt;&amp;rsquo;e göz atmak ve tüm meseleyi anlamak için iyi bir neden.&lt;/p&gt;</content:encoded></item><item><title>azd Artık AI Ajanlarınızı Yerel Ortamda Çalıştırıp Hata Ayıklamanıza İzin Veriyor — Mart 2026'daki Değişiklikler</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</guid><description>Azure Developer CLI, Mart 2026'da yedi sürüm yayımladı. Öne çıkanlar: AI ajanları için yerel çalıştırma ve hata ayıklama döngüsü, proje kurulumunda GitHub Copilot entegrasyonu ve Container App Jobs desteği.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bir ayda yedi sürüm. Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) ekibinin Mart 2026&amp;rsquo;da yaptığı bu ve başlık özelliği benim beklediğim şey: &lt;strong&gt;AI ajanları için yerel çalıştırma ve hata ayıklama döngüsü&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;PC Chan &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;tam özeti yayımladı&lt;/a&gt; ve orada pek çok şey olsa da, AI destekli uygulamalar geliştiren .NET geliştiricileri için gerçekten önem taşıyan şeyleri özetleyeyim.&lt;/p&gt;
&lt;h2 id="ai-ajanlarını-dağıtmadan-çalıştırın-ve-hata-ayıklayın"&gt;AI ajanlarını dağıtmadan çalıştırın ve hata ayıklayın&lt;/h2&gt;
&lt;p&gt;En büyük yenilik bu. Yeni &lt;code&gt;azure.ai.agents&lt;/code&gt; uzantısı, AI ajanları için düzgün bir iç döngü deneyimi sunan bir dizi komut ekliyor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;azd ai agent run&lt;/code&gt; — ajanı yerel olarak başlatır&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt; — ona mesaj gönderir (yerel veya dağıtılmış)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent show&lt;/code&gt; — container durumunu ve sağlığını gösterir&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt; — container loglarını gerçek zamanlı akıtır&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bundan önce, bir AI ajanını test etmek her değişiklik yaptığınızda Microsoft Foundry&amp;rsquo;e dağıtmak anlamına geliyordu. Artık yerel olarak yineleyebilir, ajanın davranışını test edebilir ve yalnızca hazır olduğunuzda dağıtabilirsiniz. Microsoft Agent Framework veya Semantic Kernel ile ajan geliştiriyorsanız, bu günlük iş akışınızı değiştiriyor.&lt;/p&gt;
&lt;p&gt;invoke komutu hem yerel hem de dağıtılmış ajanlara karşı çalışıyor; bu, ajanın nerede çalıştığından bağımsız olarak aynı test iş akışını kullanabileceğiniz anlamına geliyor. Bu tür bir ayrıntı, iki ayrı test betiği setini sürdürmek zorunda kalmaktan sizi kurtarıyor.&lt;/p&gt;
&lt;h2 id="github-copilot-azd-projenizi-iskelet-oluşturuyor"&gt;GitHub Copilot azd projenizi iskelet oluşturuyor&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd init&lt;/code&gt; artık &amp;ldquo;GitHub Copilot ile Kur (Önizleme)&amp;rdquo; seçeneği sunuyor. Proje yapınız hakkındaki prompt&amp;rsquo;lara manuel olarak yanıt vermek yerine, bir Copilot ajanı yapılandırmayı sizin için iskelet oluşturuyor. Herhangi bir şeyi değiştirmeden önce kirli çalışma dizinini kontrol ediyor ve MCP sunucusu araç iznini önceden istiyor.&lt;/p&gt;
&lt;p&gt;Bir komut başarısız olduğunda, &lt;code&gt;azd&lt;/code&gt; artık AI destekli sorun giderme sunuyor: bir kategori seçin (açıkla, rehberlik, sorun gider veya atla), ajanın bir düzeltme önermesine izin verin ve yeniden deneyin — hepsi terminali terk etmeden. Karmaşık altyapı kurulumları için bu gerçek anlamda zaman kazandırıyor.&lt;/p&gt;
&lt;h2 id="container-app-jobs-ve-dağıtım-iyileştirmeleri"&gt;Container App Jobs ve dağıtım iyileştirmeleri&lt;/h2&gt;
&lt;p&gt;Dikkat çekmeye değer birkaç dağıtım özelliği:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Container App Jobs&lt;/strong&gt;: &lt;code&gt;azd&lt;/code&gt; artık mevcut &lt;code&gt;host: containerapp&lt;/code&gt; yapılandırması aracılığıyla &lt;code&gt;Microsoft.App/jobs&lt;/code&gt; dağıtıyor. Bicep şablonunuz hedefin Container App mı yoksa Job mu olduğunu belirliyor — ekstra kurulum gerekmez.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Yapılandırılabilir dağıtım zaman aşımları&lt;/strong&gt;: &lt;code&gt;azd deploy&lt;/code&gt; üzerinde yeni &lt;code&gt;--timeout&lt;/code&gt; bayrağı ve &lt;code&gt;azure.yaml&lt;/code&gt;&amp;lsquo;da &lt;code&gt;deployTimeout&lt;/code&gt; alanı. Varsayılan 1200 saniyelik sınırı artık tahmin etmek zorunda değilsiniz.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uzak derleme yedeklemesi&lt;/strong&gt;: Uzak ACR derlemesi başarısız olduğunda, &lt;code&gt;azd&lt;/code&gt; otomatik olarak yerel Docker/Podman derlemesine geri düşüyor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Yerel ön uçuş doğrulama&lt;/strong&gt;: Bicep parametreleri, Azure&amp;rsquo;a bir gidiş-dönüş yapmadan eksik parametreleri yakalamak için dağıtımdan önce yerel olarak doğrulanıyor.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="geliştirici-deneyimi-iyileştirmeleri"&gt;Geliştirici deneyimi iyileştirmeleri&lt;/h2&gt;
&lt;p&gt;Toplanınca fark yaratan küçük iyileştirmeler:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JS/TS projeleri için &lt;strong&gt;otomatik pnpm/yarn algılama&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Python paketleme için &lt;strong&gt;pyproject.toml desteği&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Yerel şablon dizinleri&lt;/strong&gt; — &lt;code&gt;azd init --template&lt;/code&gt; artık çevrimdışı yineleme için dosya sistemi yollarını kabul ediyor&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--no-prompt&lt;/code&gt; modunda &lt;strong&gt;daha iyi hata mesajları&lt;/strong&gt; — eksik tüm değerler çözüm komutlarıyla birlikte bir kerede raporlanıyor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Derleme ortam değişkenleri&lt;/strong&gt; tüm framework derleme alt süreçlerine enjekte ediliyor (.NET, Node.js, Java, Python)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Son madde ince ama önemli: .NET derlemeniz artık &lt;code&gt;azd&lt;/code&gt; ortam değişkenlerine erişebilir; bu, ekstra betik yazmadan derleme zamanı yapılandırma enjeksiyonu yapabileceğiniz anlamına geliyor.&lt;/p&gt;
&lt;h2 id="özet"&gt;Özet&lt;/h2&gt;
&lt;p&gt;Yerel AI ajan hata ayıklama döngüsü bu sürümün yıldızı, ancak dağıtım iyileştirmeleri ve geliştirici deneyimi cilasının birikmesi &lt;code&gt;azd&lt;/code&gt;&amp;lsquo;yi her zamankinden daha olgun hissettiriyor. .NET uygulamalarını Azure&amp;rsquo;a — özellikle AI ajanlarını — dağıtıyorsanız, bu güncelleme kuruluma değer.&lt;/p&gt;
&lt;p&gt;Her ayrıntı için &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;tam sürüm notlarına&lt;/a&gt; bakın ya da &lt;a href="https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd"&gt;azd kurulumu&lt;/a&gt; ile başlayın.&lt;/p&gt;</content:encoded></item><item><title>Visual Studio'nun Mart Güncellemesiyle Özel Copilot Agentları Oluşturabilirsiniz — find_symbol Aracı Gerçekten Büyük</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/visual-studio-march-2026-custom-copilot-agents/</guid><description>Visual Studio'nun Mart 2026 güncellemesi özel Copilot agentları, yeniden kullanılabilir agent becerileri, dile duyarlı bir find_symbol aracı ve Test Gezgini'nden Copilot destekli profil oluşturmayı içeriyor. İşte önemli olanlar.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/visual-studio-march-2026-custom-copilot-agents/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Visual Studio bugüne kadarki en önemli Copilot güncellemesini aldı. Mark Downie &lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-march-update-build-your-own-custom-agents/"&gt;Mart sürümünü duyurdu&lt;/a&gt; ve başlık özel agentlar — ama dürüstçe söylemek gerekirse, daha aşağılarda geçen &lt;code&gt;find_symbol&lt;/code&gt; aracı iş akışınızı en çok değiştirecek özellik olabilir.&lt;/p&gt;
&lt;p&gt;Gerçekte neler olduğunu açıklayayım.&lt;/p&gt;
&lt;h2 id="reponuzda-özel-copilot-agentları"&gt;Reponuzda özel Copilot agentları&lt;/h2&gt;
&lt;p&gt;Copilot&amp;rsquo;un ekibinizin kodlama standartlarını izlemesini, build pipeline&amp;rsquo;ınızı çalıştırmasını veya dahili belgelerinizi sorgulamasını ister misiniz? Artık tam olarak bunu oluşturabilirsiniz.&lt;/p&gt;
&lt;p&gt;Özel agentlar, reponuzdaki &lt;code&gt;.github/agents/&lt;/code&gt; klasörüne bıraktığınız &lt;code&gt;.agent.md&lt;/code&gt; dosyaları olarak tanımlanıyor. Her agent, çalışma alanı farkındalığına, kod anlayışına, araçlara, tercih ettiğiniz modele ve harici servislere MCP bağlantılarına tam erişim elde ediyor. Yerleşik agentların yanında agent seçicisinde görünüyorlar.&lt;/p&gt;
&lt;p&gt;Bu, VS Code&amp;rsquo;un süredir desteklediği desenin aynısı — ve Visual Studio&amp;rsquo;nun yetişmesini görmek harika. VS Code için zaten agent oluşturmuş ekipler için &lt;code&gt;.agent.md&lt;/code&gt; dosyalarınız her iki IDE&amp;rsquo;de de çalışmalı (ancak araç adları farklılık gösterebilir, bu yüzden test edin).&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/github/awesome-copilot"&gt;awesome-copilot&lt;/a&gt; reposunda başlangıç noktası olarak kullanabileceğiniz topluluk katkılı agent yapılandırmaları var.&lt;/p&gt;
&lt;h2 id="agent-becerileri-yeniden-kullanılabilir-talimat-paketleri"&gt;Agent becerileri: yeniden kullanılabilir talimat paketleri&lt;/h2&gt;
&lt;p&gt;Beceriler, reponuzdaki &lt;code&gt;.github/skills/&lt;/code&gt; klasöründen veya profilinizdeki &lt;code&gt;~/.copilot/skills/&lt;/code&gt; konumundan otomatik olarak alınıyor. Her beceri, &lt;a href="https://agentskills.io/specification"&gt;Agent Skills spesifikasyonunu&lt;/a&gt; takip eden bir &lt;code&gt;SKILL.md&lt;/code&gt; dosyası.&lt;/p&gt;
&lt;p&gt;Becerileri, karıştırıp eşleştirebileceğiniz modüler uzmanlık alanları olarak düşünün. API kurallarınız için bir beceri, test desenleriniz için bir diğeri ve dağıtım iş akışınız için başka biri olabilir. Bir beceri etkinleştiğinde, uygulandığını bilmeniz için sohbette görünüyor.&lt;/p&gt;
&lt;p&gt;VS Code&amp;rsquo;da beceri kullandıysanız Visual Studio&amp;rsquo;da da aynı şekilde çalışıyorlar.&lt;/p&gt;
&lt;h2 id="find_symbol-agentlar-için-dile-duyarlı-navigasyon"&gt;find_symbol: agentlar için dile duyarlı navigasyon&lt;/h2&gt;
&lt;p&gt;İşler burada gerçekten ilginçleşiyor. Yeni &lt;code&gt;find_symbol&lt;/code&gt; aracı, Copilot&amp;rsquo;un agent moduna gerçek dil servisi destekli sembol navigasyonu sağlıyor. Kodunuzu metin olarak aramak yerine agent şunları yapabiliyor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Projeniz genelinde bir sembole yapılan tüm referansları bul&lt;/li&gt;
&lt;li&gt;Tür bilgisine, bildirimlere ve kapsam meta verilerine eriş&lt;/li&gt;
&lt;li&gt;Tam dil farkındalığıyla çağrı noktalarında gezin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pratikte ne anlama geliyor: Copilot&amp;rsquo;tan bir metodu yeniden düzenlemesini veya çağrı noktaları genelinde parametre imzasını güncellemesini istediğinizde, kodunuzun yapısını gerçekten görebiliyor. Artık &amp;ldquo;agent metodu değiştirdi ama üç çağrı noktasını kaçırdı&amp;rdquo; durumu yok.&lt;/p&gt;
&lt;p&gt;Desteklenen diller arasında C#, C++, Razor, TypeScript ve desteklenen LSP uzantısına sahip her şey yer alıyor. .NET geliştiricileri için bu büyük bir iyileştirme — derin tür hiyerarşileri ve arayüzlere sahip C# kod tabanları, sembol farkındalıklı navigasyondan büyük ölçüde yararlanıyor.&lt;/p&gt;
&lt;h2 id="copilot-ile-testleri-profilleyin"&gt;Copilot ile testleri profilleyin&lt;/h2&gt;
&lt;p&gt;Test Gezgini bağlam menüsünde artık bir &lt;strong&gt;Profile with Copilot&lt;/strong&gt; komutu var. Bir test seçin, profile tıklayın ve Profiling Agent onu otomatik olarak çalıştırıp performansı analiz eder — uygulanabilir içgörüler sunmak için CPU kullanımı ve enstrümantasyon verilerini birleştirir.&lt;/p&gt;
&lt;p&gt;Artık profil oluşturucu oturumlarını manuel olarak yapılandırmak, testi çalıştırmak, sonuçları dışa aktarmak ve bir flame graph okumaya çalışmak yok. Agent analizi yapıp neyin yavaş olduğunu ve neden olduğunu söylüyor. Şu anda yalnızca .NET, ki bu Visual Studio&amp;rsquo;nun derin .NET tanı entegrasyonu göz önüne alındığında mantıklı.&lt;/p&gt;
&lt;h2 id="canlı-hata-ayıklama-sırasında-performans-ipuçları"&gt;Canlı hata ayıklama sırasında performans ipuçları&lt;/h2&gt;
&lt;p&gt;Performans optimizasyonu artık sonrasında değil, hata ayıklarken gerçekleşiyor. Kod üzerinde adım adım ilerlerken Visual Studio satır içinde yürütme süresini ve performans sinyallerini gösteriyor. Yavaş bir satır mı gördünüz? Perf İpucu&amp;rsquo;na tıklayın ve Copilot&amp;rsquo;tan hemen orada optimizasyon önerileri isteyin.&lt;/p&gt;
&lt;p&gt;Profiling Agent çalışma zamanı verilerini otomatik olarak yakalıyor — geçen süre, CPU kullanımı, bellek davranışı — ve Copilot bunu sıcak noktaları tespit etmek için kullanıyor. Bu, performans çalışmasını ertelediğiniz ayrı bir görev yerine hata ayıklama akışınızın bir parçası olarak tutuyor.&lt;/p&gt;
&lt;h2 id="solution-explorerdan-nuget-güvenlik-açıklarını-düzeltin"&gt;Solution Explorer&amp;rsquo;dan NuGet güvenlik açıklarını düzeltin&lt;/h2&gt;
&lt;p&gt;Bir NuGet paketinde güvenlik açığı tespit edildiğinde, artık doğrudan Solution Explorer&amp;rsquo;da &lt;strong&gt;Fix with GitHub Copilot&lt;/strong&gt; bağlantısıyla bir bildirim görüyorsunuz. Tıklayın ve Copilot güvenlik açığını analiz eder, doğru paket güncellemelerini önerir ve uygular.&lt;/p&gt;
&lt;p&gt;Bağımlılıkları güncel tutmakta zorlanan ekipler için (ki bu esasen herkes), &amp;ldquo;bir güvenlik açığı olduğunu biliyorum ama doğru güncelleme yolunu bulmak başlı başına bir proje&amp;rdquo; sürtünmesini ortadan kaldırıyor.&lt;/p&gt;
&lt;h2 id="sonuç"&gt;Sonuç&lt;/h2&gt;
&lt;p&gt;Özel agentlar ve beceriler başlık haberi, ancak &lt;code&gt;find_symbol&lt;/code&gt; uyuyan dev — .NET kodunu yeniden düzenlerken Copilot&amp;rsquo;un ne kadar doğru olabileceğini temelden değiştiriyor. Canlı profil oluşturma entegrasyonu ve güvenlik açığı düzeltmeleriyle birleşince bu güncelleme, Visual Studio&amp;rsquo;nun AI özelliklerini demo hazır değil gerçekten pratik hissettiriyor.&lt;/p&gt;
&lt;p&gt;Her şeyi denemek için &lt;a href="https://visualstudio.microsoft.com/downloads/"&gt;Visual Studio 2026 Insiders&lt;/a&gt;&amp;lsquo;ı indirin.&lt;/p&gt;</content:encoded></item><item><title>KubeCon Avrupa 2026: .NET Geliştiricilerinin Gerçekten Önemsemesi Gerekenler</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/</guid><description>Microsoft, KubeCon Avrupa 2026'da bir dizi Kubernetes duyurusu yaptı. İşte filtrelenmiş versiyonu — .NET uygulamaları gönderiyorsanız önemli olan yalnızca AKS ve cloud-native güncellemeleri.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Büyük bir duyuru yazısı yayımlandığında ve &amp;ldquo;harika, ama bu benim için ne değiştiriyor ki&amp;rdquo; diye düşünerek kaydırma yaptığınız o hissi bilirsiniz, değil mi? Ben her KubeCon sezonunda böyle hissediyorum.&lt;/p&gt;
&lt;p&gt;Microsoft, &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;KubeCon Avrupa 2026 tam özetini&lt;/a&gt; yayımladı — bizzat Brendan Burns tarafından yazıldı — ve dürüst olmak gerekirse? Burada gerçek bir içerik var. Yalnızca özellik onay kutuları değil, üretimdeki çalışma biçiminizi değiştiren türden operasyonel iyileştirmeler.&lt;/p&gt;
&lt;p&gt;.NET geliştiricileri olarak bizim için gerçekten önemli olanları ele alayım.&lt;/p&gt;
&lt;h2 id="service-mesh-yükü-olmadan-mtls"&gt;Service Mesh Yükü Olmadan mTLS&lt;/h2&gt;
&lt;p&gt;Service mesh&amp;rsquo;ler hakkında şunu söylemek gerekir: herkes güvenlik garantilerini istiyor, kimse operasyonel yükü istemiyor. AKS nihayet bu boşluğu kapatıyor.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/application-network"&gt;Azure Kubernetes Application Network&lt;/a&gt;, ağır sidecar&amp;rsquo;lı bir mesh dağıtmadan karşılıklı TLS, uygulama farkında yetkilendirme ve trafik telemetrisi sunuyor. &lt;a href="https://aka.ms/acns/cilium-mtls"&gt;Advanced Container Networking Services&amp;rsquo;deki Cilium mTLS&lt;/a&gt; ile birleşince, kimlik yönetimi için X.509 sertifikaları ve SPIRE kullanan şifreli pod-to-pod iletişimi elde ediyorsunuz.&lt;/p&gt;
&lt;p&gt;Pratikte ne anlama geliyor: arka plan worker&amp;rsquo;larıyla konuşan ASP.NET Core API&amp;rsquo;leriniz, birbirini çağıran gRPC servisleriniz — sıfır uygulama kodu değişikliğiyle ağ düzeyinde şifreli ve kimlik doğrulamalı. Bu büyük bir şey.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ingress-nginx&lt;/code&gt;&amp;lsquo;ten geçiş yapan ekipler için tam Kubernetes Gateway API desteğiyle &lt;a href="https://aka.ms/aks/app-routing/gateway-api"&gt;Application Routing with Meshless Istio&lt;/a&gt; da mevcut. Sidecar yok. Standart tabanlı. Ve kademeli geçiş için &lt;code&gt;ingress2gateway&lt;/code&gt; araçlarını gönderdiler.&lt;/p&gt;
&lt;h2 id="sonradan-düşünülmemiş-gpu-gözlemlenebilirliği"&gt;Sonradan Düşünülmemiş GPU Gözlemlenebilirliği&lt;/h2&gt;
&lt;p&gt;.NET servislerinizin yanında AI çıkarımı çalıştırıyorsanız (ve dürüst olalım, kim başlamıyor?), GPU izleme kör noktasına çarpmış olabilirsiniz. Harika CPU/bellek dashboard&amp;rsquo;larınız olur ve ardından&amp;hellip; manuel exporter bağlantıları olmadan GPU&amp;rsquo;lar için hiçbir şey.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/managed-gpu-metrics"&gt;AKS artık GPU metriklerini&lt;/a&gt; yönetilen Prometheus ve Grafana&amp;rsquo;ya yerel olarak sunuyor. Aynı yığın, aynı dashboard&amp;rsquo;lar, aynı uyarı pipeline&amp;rsquo;ı. Özel exporter yok, üçüncü taraf ajan yok.&lt;/p&gt;
&lt;p&gt;Ağ tarafında, &lt;a href="https://learn.microsoft.com/en-us/azure/aks/container-network-observability-logs"&gt;tek tıklamalı Azure Monitor deneyimiyle&lt;/a&gt; HTTP, gRPC ve Kafka trafiği için akış başına görünürlük eklediler. IP&amp;rsquo;ler, portlar, iş yükleri, akış yönü, politika kararları — hepsi yerleşik dashboard&amp;rsquo;larda.&lt;/p&gt;
&lt;p&gt;Ve beni iki kez baktıran şu oldu: &lt;a href="https://learn.microsoft.com/en-us/azure/aks/advanced-container-networking-services-overview"&gt;agentic container networking&lt;/a&gt; kümenizin ağ durumu hakkında doğal dil soruları sorabileceğiniz bir web UI ekliyor. &amp;ldquo;Pod X neden servis Y&amp;rsquo;ye ulaşamıyor?&amp;rdquo; → canlı telemetriden salt okunur tanılamalar. Gece 2&amp;rsquo;de gerçekten kullanışlı.&lt;/p&gt;
&lt;h2 id="phd-gerektirmeyen-kümeler-arası-ağ"&gt;PhD Gerektirmeyen Kümeler Arası Ağ&lt;/h2&gt;
&lt;p&gt;Multi-cluster Kubernetes, tarihsel olarak &amp;ldquo;kendi ağ yapıştırıcınızı getirin&amp;rdquo; deneyimiydi. Azure Kubernetes Fleet Manager artık yönetilen Cilium cluster mesh üzerinden &lt;a href="https://aka.ms/kubernetes-fleet/networking/cross-cluster"&gt;kümeler arası ağ&lt;/a&gt; sunuyor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AKS kümeleri arasında birleşik bağlantı&lt;/li&gt;
&lt;li&gt;Kümeler arası keşif için global servis kaydı&lt;/li&gt;
&lt;li&gt;Merkezi olarak yönetilen, küme başına tekrarlanmayan konfigürasyon&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dayanıklılık veya uyumluluk için bölgeler arasında .NET mikro servisler çalıştırıyorsanız, bu çok sayıda kırılgan özel yapıştırıcının yerini alıyor. West Europe&amp;rsquo;daki A Servisi, tutarlı yönlendirme ve güvenlik politikalarıyla mesh üzerinden East US&amp;rsquo;deki B Servisini keşfedebilir ve çağırabilir.&lt;/p&gt;
&lt;h2 id="cesaret-gerektirmeyen-yükseltmeler"&gt;Cesaret Gerektirmeyen Yükseltmeler&lt;/h2&gt;
&lt;p&gt;Dürüst olalım — üretimdeki Kubernetes yükseltmeleri streslidir. &amp;ldquo;Yükselt ve umut et&amp;rdquo; pek çok ekip için fiili strateji olmuştur ve kümelerin sürümlerin gerisinde kalmasının ana nedenidir.&lt;/p&gt;
&lt;p&gt;İki yeni özellik bunu değiştiriyor:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mavi-yeşil agent pool yükseltmeleri&lt;/strong&gt; yeni konfigürasyonla paralel bir node pool oluşturur. Davranışı doğrulayın, trafiği kademeli olarak kaydırın ve temiz bir geri alma yolu tutun. Üretim node&amp;rsquo;larında artık yerinde mutasyon yok.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agent pool rollback&lt;/strong&gt;, bir yükseltme ters gittiğinde kümeyi yeniden oluşturmadan bir node pool&amp;rsquo;u önceki Kubernetes sürümüne ve node imajına döndürmenizi sağlar.&lt;/p&gt;
&lt;p&gt;Birlikte ele alındığında, bunlar nihayet operatörlere yükseltme yaşam döngüsü üzerinde gerçek kontrol veriyor. .NET ekipleri için bu önemlidir çünkü platform hızı, yeni runtime&amp;rsquo;ları, güvenlik yamalarını ve ağ özelliklerini ne kadar hızlı benimseyebileceğinizi doğrudan belirler.&lt;/p&gt;
&lt;h2 id="ai-iş-yükleri-birinci-sınıf-kubernetes-vatandaşı-oluyor"&gt;AI İş Yükleri Birinci Sınıf Kubernetes Vatandaşı Oluyor&lt;/h2&gt;
&lt;p&gt;Upstream açık kaynak çalışması da eşit derecede önemli. Dynamic Resource Allocation (DRA) Kubernetes 1.36&amp;rsquo;da GA&amp;rsquo;ya geçti, GPU planlamasını bir geçici çözüm yerine gerçek anlamda birinci sınıf bir özellik haline getirdi.&lt;/p&gt;
&lt;p&gt;İzlemeye değer birkaç proje:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Proje&lt;/th&gt;
&lt;th&gt;Ne Yapıyor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/kaito-project/kubeairunway"&gt;AI Runway&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Çıkarım için ortak Kubernetes API&amp;rsquo;si — K8s bilmeden model dağıtın, HuggingFace keşfi ve maliyet tahminleriyle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.cncf.io/blog/2026/01/07/holmesgpt-agentic-troubleshooting-built-for-the-cloud-native-era/"&gt;HolmesGPT&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cloud-native için agentic sorun giderme — artık CNCF Sandbox projesi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/project-dalec/dalec"&gt;Dalec&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;SBOM üretimiyle bildirimsel container imaj oluşturma — derleme aşamasında daha az CVE&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Yön açık: .NET API&amp;rsquo;niz, Semantic Kernel orkestrasyon katmanınız ve çıkarım iş yüklerinizin hepsi tek tutarlı bir platform modelinde çalışmalı. Oraya doğru ilerliyoruz.&lt;/p&gt;
&lt;h2 id="bu-hafta-nereden-başlardım"&gt;Bu Hafta Nereden Başlardım&lt;/h2&gt;
&lt;p&gt;Bu değişiklikleri ekibiniz için değerlendiriyorsanız, işte dürüst öncelik listem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Önce gözlemlenebilirlik&lt;/strong&gt; — üretim dışı bir kümede GPU metriklerini ve ağ akış günlüklerini etkinleştirin. Neyi kaçırdığınızı görün.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mavi-yeşil yükseltmeleri deneyin&lt;/strong&gt; — bir sonraki üretim kümesi yükseltmenizden önce rollback iş akışını test edin. Sürece güven inşa edin.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kimlik farkında ağı pilot edin&lt;/strong&gt; — bir dahili servis yolu seçin ve Cilium ile mTLS&amp;rsquo;i etkinleştirin. Yükü ölçün (spoiler: minimumdur).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fleet Manager&amp;rsquo;ı değerlendirin&lt;/strong&gt; — ikiden fazla küme çalıştırıyorsanız, kümeler arası ağ azaltılan özel yapıştırıcıyla kendini amorti eder.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Küçük deneyler, hızlı geri bildirim. Her zaman doğru hamle budur.&lt;/p&gt;
&lt;h2 id="son-söz"&gt;Son Söz&lt;/h2&gt;
&lt;p&gt;KubeCon duyuruları bunaltıcı olabiliyor, ancak bu grup gerçekten AKS&amp;rsquo;teki .NET ekipleri için iğneyi hareket ettiriyor. Mesh yükü olmadan daha iyi ağ güvenliği, gerçek GPU gözlemlenebilirliği, daha güvenli yükseltmeler ve daha güçlü AI altyapısı temelleri.&lt;/p&gt;
&lt;p&gt;Halihazırda AKS&amp;rsquo;teyseniz, bu operasyonel temelinizi sıkılaştırmak için harika bir an. .NET iş yüklerini Kubernetes&amp;rsquo;e taşımayı planlıyorsanız — platform önemli ölçüde daha üretim hazır hale geldi.&lt;/p&gt;</content:encoded></item><item><title>.NET Geliştiricilerinin VS Code 1.112'de Gerçekten Önemsemesi Gerekenler</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/vscode-1-112-dotnet-developers/</guid><description>VS Code 1.112 yayınlandı ve agent yükseltmeleri, entegre bir tarayıcı hata ayıklayıcı, MCP korumalı alan ve monorepo desteğiyle dolu. .NET ile geliştirme yapıyorsanız gerçekten önemli olan şeyler burada.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/vscode-1-112-dotnet-developers/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;VS Code 1.112 yayınlandı ve dürüstçe söylemek gerekirse? .NET dünyasında gününüzü geçiriyorsanız bu sürüm farklı bir his veriyor. &lt;a href="https://code.visualstudio.com/updates/v1_112"&gt;Resmi sürüm notlarında&lt;/a&gt; pek çok şey var, ama sizi biraz kaydırmadan kurtarayım ve gerçekten bizim için önemli olanlara odaklanayım.&lt;/p&gt;
&lt;h2 id="copilot-cli-çok-daha-kullanışlı-hale-geldi"&gt;Copilot CLI çok daha kullanışlı hale geldi&lt;/h2&gt;
&lt;p&gt;Bu sürümün büyük teması &lt;strong&gt;agent özerkliği&lt;/strong&gt; — Copilot&amp;rsquo;a her adımı siz denetlemeden işini yapması için daha fazla alan tanıma.&lt;/p&gt;
&lt;h3 id="mesaj-yönlendirme-ve-sıralama"&gt;Mesaj yönlendirme ve sıralama&lt;/h3&gt;
&lt;p&gt;Copilot CLI bir görevin ortasındayken bir şeyi söylemeyi unuttuğunuzu fark ettiğiniz o anı bilirsiniz. Önce beklemeniz gerekiyordu. Artık bir istek hâlâ çalışırken mesaj gönderebilirsiniz — ya mevcut yanıtı yönlendirmek ya da takip talimatlarını sıraya almak için.&lt;/p&gt;
&lt;p&gt;Bu, Copilot&amp;rsquo;un bir proje kurduğunu izlerken &amp;ldquo;ah, buna MassTransit de eklemeliyim&amp;rdquo; dediğiniz uzun &lt;code&gt;dotnet&lt;/code&gt; iskele görevleri için çok önemli.&lt;/p&gt;
&lt;h3 id="izin-seviyeleri"&gt;İzin seviyeleri&lt;/h3&gt;
&lt;p&gt;En çok heyecanlandığım bu. Copilot CLI oturumları artık üç izin seviyesini destekliyor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default Permissions&lt;/strong&gt; — araçların çalışmadan önce onay istediği olağan akış&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bypass Approvals&lt;/strong&gt; — her şeyi otomatik onaylar ve hatalarda yeniden dener&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autopilot&lt;/strong&gt; — tamamen özerk: araçları onaylar, kendi sorularını yanıtlar ve görev tamamlanana kadar devam eder&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Entity Framework ile migrasyonlar, Docker kurulumu ve yeni bir ASP.NET Core API&amp;rsquo;si oluşturuyorsanız — Autopilot modu demek istediğinizi tanımlayıp kahve almaya gidebilirsiniz demek. Gerisini halledecek.&lt;/p&gt;
&lt;p&gt;Autopilot&amp;rsquo;u &lt;code&gt;chat.autopilot.enabled&lt;/code&gt; ayarıyla etkinleştirebilirsiniz.&lt;/p&gt;
&lt;h3 id="devretmeden-önce-değişiklikleri-önizleyin"&gt;Devretmeden önce değişiklikleri önizleyin&lt;/h3&gt;
&lt;p&gt;Copilot CLI&amp;rsquo;a bir görev devrettiğinizde bir worktree oluşturur. Daha önce, teslim edilmemiş değişiklikleriniz varsa nelerin etkileneceğini görmek için Source Control&amp;rsquo;ü kontrol etmeniz gerekiyordu. Artık Chat görünümü, kopyalamak, taşımak veya yoksaymak isteyip istemediğinize karar vermeden önce bekleyen değişiklikleri doğrudan orada gösteriyor.&lt;/p&gt;
&lt;p&gt;Küçük bir şey, ama &amp;ldquo;dur, ne hazırlamıştım?&amp;rdquo; anından kurtarıyor.&lt;/p&gt;
&lt;h2 id="vs-codedan-çıkmadan-web-uygulamalarını-hata-ayıklayın"&gt;VS Code&amp;rsquo;dan çıkmadan web uygulamalarını hata ayıklayın&lt;/h2&gt;
&lt;p&gt;Entegre tarayıcı artık &lt;strong&gt;tam hata ayıklamayı&lt;/strong&gt; destekliyor. Kesme noktaları koyabilir, kod üzerinde adım adım ilerleyebilir ve değişkenleri inceleyebilirsiniz — hepsi VS Code içinde. Artık Edge DevTools&amp;rsquo;a geçiş yok.&lt;/p&gt;
&lt;p&gt;Yeni bir &lt;code&gt;editor-browser&lt;/code&gt; hata ayıklama türü var ve mevcut &lt;code&gt;msedge&lt;/code&gt; veya &lt;code&gt;chrome&lt;/code&gt; başlatma yapılandırmalarınız varsa, geçiş &lt;code&gt;launch.json&lt;/code&gt;&amp;lsquo;daki &lt;code&gt;type&lt;/code&gt; alanını değiştirmek kadar basit:&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;Blazor geliştiricileri için bu oyun değiştirici. Terminalde zaten &lt;code&gt;dotnet watch&lt;/code&gt; çalıştırıyorsunuz — artık hata ayıklamanız da aynı pencerede kalıyor.&lt;/p&gt;
&lt;p&gt;Tarayıcı aynı zamanda bağımsız yakınlaştırma seviyeleri (sonunda!), düzgün sağ tıklama bağlam menüleri aldı ve yakınlaştırma web sitesi başına hatırlanıyor.&lt;/p&gt;
&lt;h2 id="mcp-sunucu-korumalı-alanı"&gt;MCP sunucu korumalı alanı&lt;/h2&gt;
&lt;p&gt;Bu, düşündüğünüzden daha önemli. MCP sunucuları kullanıyorsanız — belki Azure kaynaklarınız veya veritabanı sorguları için özel bir tane kurduysanız — bunlar VS Code sürecinizle aynı izinlerle çalışıyordu. Yani dosya sisteminize, ağınıza, her şeye tam erişim.&lt;/p&gt;
&lt;p&gt;Artık onları korumalı alana alabilirsiniz. &lt;code&gt;mcp.json&lt;/code&gt; dosyanızda:&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;p&gt;Korumalı alandaki bir sunucu sahip olmadığı bir şeye erişim gerektirdiğinde, VS Code izin vermeniz için sizi uyarıyor. &amp;ldquo;Kimse garip bir şey yapmasın&amp;rdquo; yaklaşımından çok daha iyi.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Not:&lt;/strong&gt; Korumalı alan şimdilik macOS ve Linux&amp;rsquo;ta kullanılabilir. Windows desteği geliyor — WSL gibi uzak senaryolar çalışıyor.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="monorepo-özelleştirme-keşfi"&gt;Monorepo özelleştirme keşfi&lt;/h2&gt;
&lt;p&gt;Bir monorepo&amp;rsquo;da çalışıyorsanız (ve dürüstçe söylemek gerekirse, pek çok kurumsal .NET çözümü buna dönüşüyor), bu gerçek bir sorun noktasını çözüyor.&lt;/p&gt;
&lt;p&gt;Daha önce, reponuzun bir alt klasörünü açtığınızda VS Code, depo kökünüzdeki &lt;code&gt;copilot-instructions.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt; veya özel becerileri bulamıyordu. Artık &lt;code&gt;chat.useCustomizationsInParentRepositories&lt;/code&gt; ayarıyla &lt;code&gt;.git&lt;/code&gt; köküne kadar yukarı çıkıp her şeyi buluyor.&lt;/p&gt;
&lt;p&gt;Bu, ekibinizin tüm monorepo projelerine herkesin kök klasörü açmasına gerek kalmadan agent talimatlarını, prompt dosyalarını ve özel araçları paylaşabilmesi anlamına geliyor.&lt;/p&gt;
&lt;h2 id="agent-hata-ayıklama-için-troubleshoot"&gt;Agent hata ayıklama için /troubleshoot&lt;/h2&gt;
&lt;p&gt;Özel talimatlar veya beceriler ayarlayıp neden alınmadığını hiç merak ettiniz mi? Yeni &lt;code&gt;/troubleshoot&lt;/code&gt; becerisi agent hata ayıklama günlüklerini okuyup ne olduğunu söylüyor — hangi araçların kullanıldığı veya atlandığı, neden talimatların yüklenmediği ve yavaş yanıtlara neyin yol açtığı.&lt;/p&gt;
&lt;p&gt;Bunu şununla etkinleştirin:&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;p&gt;Ardından sohbette &lt;code&gt;/troubleshoot neden özel beceri yüklenmiyor?&lt;/code&gt; yazın.&lt;/p&gt;
&lt;p&gt;Bu hata ayıklama günlüklerini artık dışa ve içe aktarabilirsiniz; bir şey beklendiği gibi çalışmadığında ekibinizle paylaşmak için harika.&lt;/p&gt;
&lt;h2 id="resim-ve-ikili-dosya-desteği"&gt;Resim ve ikili dosya desteği&lt;/h2&gt;
&lt;p&gt;Agentlar artık diskten resim dosyalarını ve ikili dosyaları doğrudan okuyabiliyor. İkili dosyalar hexdump formatında sunuluyor ve resim çıktıları (entegre tarayıcıdan alınan ekran görüntüleri gibi) bir carousel görünümünde gösteriliyor.&lt;/p&gt;
&lt;p&gt;.NET geliştiricileri için düşünün: bir UI hatasının ekran görüntüsünü sohbete yapıştırın ve agent neyin yanlış olduğunu anlasın, ya da Blazor bileşeni render çıktısını analiz ettirin.&lt;/p&gt;
&lt;h2 id="otomatik-sembol-referansları"&gt;Otomatik sembol referansları&lt;/h2&gt;
&lt;p&gt;Küçük bir yaşam kalitesi iyileştirmesi: bir sembol adını (bir sınıf, metot vb.) kopyalayıp sohbete yapıştırdığınızda VS Code artık otomatik olarak &lt;code&gt;#sym:İsim&lt;/code&gt; referansına dönüştürüyor. Bu, agent&amp;rsquo;a manuel olarak eklemek zorunda kalmadan bu sembol hakkında tam bağlam sağlıyor.&lt;/p&gt;
&lt;p&gt;Bunun yerine düz metin istiyorsanız &lt;code&gt;Ctrl+Shift+V&lt;/code&gt; kullanın.&lt;/p&gt;
&lt;h2 id="eklentiler-artık-etkinleştirilebilirdevre-dışı-bırakılabilir"&gt;Eklentiler artık etkinleştirilebilir/devre dışı bırakılabilir&lt;/h2&gt;
&lt;p&gt;Daha önce bir MCP sunucusunu veya eklentiyi devre dışı bırakmak kaldırmak anlamına geliyordu. Artık hem genel hem de çalışma alanı başına açıp kapatabilirsiniz. Extensions görünümünde veya Customizations görünümünde sağ tıklayın ve işiniz bitti.&lt;/p&gt;
&lt;p&gt;npm ve pypi&amp;rsquo;den eklentiler artık otomatik güncellenebilir; ancak güncellemeler makinenizde yeni kod çalıştırmak anlamına geldiğinden önce onay isteyecekler.&lt;/p&gt;
&lt;h2 id="sonuç"&gt;Sonuç&lt;/h2&gt;
&lt;p&gt;VS Code 1.112, agent deneyimini açıkça ileriye taşıyor — daha fazla özerklik, daha iyi hata ayıklama, daha sıkı güvenlik. .NET geliştiricileri için entegre tarayıcı hata ayıklama ve Copilot CLI iyileştirmeleri öne çıkan özellikler.&lt;/p&gt;
&lt;p&gt;Bir .NET projesi için tam Copilot CLI oturumu Autopilot modunda henüz denemediyseniz bu sürüm başlamak için iyi bir zaman. Sadece izinlerinizi ayarlamayı ve bırakıp gidermeyi unutmayın.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://code.visualstudio.com/updates/v1_112"&gt;VS Code 1.112&amp;rsquo;yi indirin&lt;/a&gt; veya &lt;strong&gt;Help &amp;gt; Check for Updates&lt;/strong&gt; aracılığıyla VS Code içinden güncelleyin.&lt;/p&gt;</content:encoded></item><item><title>Foundry Agent Service GA'ya Geçti: .NET Agent Geliştiricileri İçin Gerçekten Önemli Olan Nedir?</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/</guid><description>Microsoft'un Foundry Agent Service'i özel ağ desteği, Voice Live, üretim değerlendirmeleri ve açık çok modelli runtime ile GA'ya geçti. İşte bilmeniz gerekenler.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Kabul edelim — bir AI agent prototipi oluşturmak kolay kısım. Zor olan ise sonrasındaki her şey: uygun ağ izolasyonuyla üretime almak, gerçekten anlamlı değerlendirmeler yapmak, uyumluluk gereksinimlerini karşılamak ve gece 2&amp;rsquo;de her şeyin çökmemesini sağlamak.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;Foundry Agent Service az önce GA&amp;rsquo;ya geçti&lt;/a&gt; ve bu sürüm tam da bu &amp;ldquo;sonrasındaki her şey&amp;rdquo; boşluğuna odaklanıyor.&lt;/p&gt;
&lt;h2 id="responses-api-üzerine-inşa-edildi"&gt;Responses API Üzerine İnşa Edildi&lt;/h2&gt;
&lt;p&gt;İşte manşet haber: yeni nesil Foundry Agent Service, OpenAI Responses API üzerine kurulu. Eğer bu wire protokolüyle zaten geliştirme yapıyorsanız, Foundry&amp;rsquo;ye geçiş minimal kod değişikliği gerektiriyor. Kazandıklarınız: kurumsal güvenlik, özel ağ desteği, Entra RBAC, tam izleme ve değerlendirme — mevcut agent mantığınızın üstüne.&lt;/p&gt;
&lt;p&gt;Mimari kasıtlı olarak açık tasarlanmış. Tek bir model sağlayıcısına veya tek bir orkestrasyon framework&amp;rsquo;üne bağlı değilsiniz. Planlama için DeepSeek, üretim için OpenAI, orkestrasyon için LangGraph kullanabilirsiniz — runtime tutarlılık katmanını halleder.&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;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;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.projects.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PromptAgentDefinition&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;with&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;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;credential&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;AIProjectClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&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;AZURE_AI_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;credential&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;project_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;project_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_openai_client&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;openai_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="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;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;project_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_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;agent_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my-enterprise-agent&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;definition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;PromptAgentDefinition&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;model&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;AZURE_AI_MODEL_DEPLOYMENT_NAME&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="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;conversation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conversations&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&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="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;responses&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&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;conversation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&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="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;What are best practices for building AI agents?&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;extra_body&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="s2"&gt;&amp;#34;agent_reference&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;name&amp;#34;&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;name&lt;/span&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;agent_reference&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;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output_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;blockquote&gt;
&lt;p&gt;&lt;code&gt;azure-ai-agents&lt;/code&gt; paketinden geliyorsanız, agent&amp;rsquo;lar artık &lt;code&gt;azure-ai-projects&lt;/code&gt; içindeki &lt;code&gt;AIProjectClient&lt;/code&gt; üzerinde birinci sınıf operasyonlar. Bağımsız paketi bırakın ve response&amp;rsquo;ları yönetmek için &lt;code&gt;get_openai_client()&lt;/code&gt; kullanın.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="özel-ağ-desteği-kurumsal-engel-kaldırıldı"&gt;Özel Ağ Desteği: Kurumsal Engel Kaldırıldı&lt;/h2&gt;
&lt;p&gt;Bu, kurumsal benimsemeyi engelleyen sorunu ortadan kaldıran özelliktir. Foundry artık BYO VNet ile uçtan uca tam özel ağ desteği sunuyor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Genel çıkış yok&lt;/strong&gt; — agent trafiği hiçbir zaman genel internete çıkmıyor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Container/alt ağ enjeksiyonu&lt;/strong&gt; yerel iletişim için ağınıza entegre ediliyor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Araç bağlantısı dahil&lt;/strong&gt; — MCP server&amp;rsquo;lar, Azure AI Search, Fabric data agent&amp;rsquo;ları hepsi özel yollar üzerinden çalışıyor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Son nokta kritik. Yalnızca çıkarım çağrıları değil, her araç çağrısı ve her veri alma işlemi de ağ sınırınızın içinde kalıyor. Dışarıya yönlendirmeyi yasaklayan veri sınıflandırma politikaları altında çalışan ekipler için işte bu eksik olan parçaydı.&lt;/p&gt;
&lt;h2 id="doğru-yapılmış-mcp-kimlik-doğrulaması"&gt;Doğru Yapılmış MCP Kimlik Doğrulaması&lt;/h2&gt;
&lt;p&gt;MCP server bağlantıları artık tüm auth pattern yelpazesini destekliyor:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Auth Yöntemi&lt;/th&gt;
&lt;th&gt;Ne Zaman Kullanılır&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Key tabanlı&lt;/td&gt;
&lt;td&gt;Kurum geneli dahili araçlar için basit paylaşımlı erişim&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Agent Identity&lt;/td&gt;
&lt;td&gt;Servisten servise; agent kendisi olarak kimlik doğrular&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Managed Identity&lt;/td&gt;
&lt;td&gt;Proje bazında izolasyon; kimlik bilgisi yönetimi yok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OAuth Identity Passthrough&lt;/td&gt;
&lt;td&gt;Kullanıcı delegeli erişim; agent kullanıcılar adına hareket eder&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;OAuth Identity Passthrough ilginç olan. Kullanıcıların bir agent&amp;rsquo;a kişisel verilerine — OneDrive&amp;rsquo;larına, Salesforce organizasyonlarına, kullanıcı kapsamlı bir SaaS API&amp;rsquo;sine — erişim vermesi gerektiğinde, agent standart OAuth akışlarıyla onlar adına hareket eder. Herkesi temsil etmeye çalışan paylaşımlı bir sistem kimliği yok.&lt;/p&gt;
&lt;h2 id="voice-live-tesisatla-uğraşmadan-konuşmadan-konuşmaya"&gt;Voice Live: Tesisatla Uğraşmadan Konuşmadan Konuşmaya&lt;/h2&gt;
&lt;p&gt;Bir agent&amp;rsquo;a ses eklemek eskiden STT, LLM ve TTS&amp;rsquo;i bir araya getirmek anlamına geliyordu — üç servis, üç gecikme adımı, üç faturalama yüzeyi, hepsi elle senkronize. &lt;strong&gt;Voice Live&lt;/strong&gt; bunu tek bir yönetilen API&amp;rsquo;ye indirgiyor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Semantik ses aktivitesi ve konuşma sonu algılama (anlamı anlıyor, sadece sessizliği değil)&lt;/li&gt;
&lt;li&gt;Sunucu taraflı gürültü bastırma ve yankı giderme&lt;/li&gt;
&lt;li&gt;Araya girme desteği (kullanıcılar yanıt ortasında sözü kesebilir)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ses etkileşimleri, metinle aynı agent runtime&amp;rsquo;ından geçiyor. Aynı değerlendiriciler, aynı izler, aynı maliyet görünürlüğü. Müşteri desteği, saha hizmeti veya erişilebilirlik senaryoları için bu, daha önce özel bir ses pipeline&amp;rsquo;ı gerektiren şeyin yerini alıyor.&lt;/p&gt;
&lt;h2 id="değerlendirmeler-onay-kutusundan-sürekli-izlemeye"&gt;Değerlendirmeler: Onay Kutusundan Sürekli İzlemeye&lt;/h2&gt;
&lt;p&gt;Foundry&amp;rsquo;nin üretim kalitesi konusunda ciddiye geldiği yer burası. Değerlendirme sistemi artık üç katmana sahip:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Hazır değerlendiriciler&lt;/strong&gt; — tutarlılık, alaka, temellendirilme, erişim kalitesi, güvenlik. Bir veri kümesine veya canlı trafiğe bağlayın, puanları geri alın.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Özel değerlendiriciler&lt;/strong&gt; — kendi iş mantığınızı, ton standartlarınızı ve alana özgü uyumluluk kurallarınızı kodlayın.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sürekli değerlendirme&lt;/strong&gt; — Foundry canlı üretim trafiğini örnekliyor, değerlendirici paketinizi çalıştırıyor ve sonuçları dashboard&amp;rsquo;lar aracılığıyla sunuyor. Temellendirilme düştüğünde veya güvenlik eşikleri aşıldığında Azure Monitor uyarıları ayarlayın.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Her şey Azure Monitor Application Insights&amp;rsquo;a yayımlanıyor. Agent kalitesi, altyapı sağlığı, maliyet ve uygulama telemetrisi — hepsi tek bir yerde.&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;eval_object&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;evals&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&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;Agent Quality Evaluation&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;data_source_config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DataSourceConfigCustom&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="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;custom&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;item_schema&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="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;object&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="s2"&gt;&amp;#34;properties&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;query&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;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;string&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="s2"&gt;&amp;#34;required&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;query&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="n"&gt;include_sample_schema&lt;/span&gt;&lt;span class="o"&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;testing_criteria&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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_evaluator&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="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;fluency&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="s2"&gt;&amp;#34;evaluator_name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;builtin.fluency&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="s2"&gt;&amp;#34;initialization_parameters&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="s2"&gt;&amp;#34;deployment_name&amp;#34;&lt;/span&gt;&lt;span class="p"&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;AZURE_AI_MODEL_DEPLOYMENT_NAME&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="s2"&gt;&amp;#34;data_mapping&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="s2"&gt;&amp;#34;query&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;{{item.query}}&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="s2"&gt;&amp;#34;response&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;{{sample.output_text}}&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;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="barındırılan-agentlar-için-altı-yeni-bölge"&gt;Barındırılan Agent&amp;rsquo;lar İçin Altı Yeni Bölge&lt;/h2&gt;
&lt;p&gt;Barındırılan agent&amp;rsquo;lar artık East US, North Central US, Sweden Central, Southeast Asia, Japan East ve daha fazlasında kullanılabilir. Bu, veri yerleşim gereksinimleri için ve agent&amp;rsquo;ınız veri kaynaklarına yakın çalıştığında gecikmeyi azaltmak için önemlidir.&lt;/p&gt;
&lt;h2 id="net-geliştiricileri-için-neden-önemli"&gt;.NET Geliştiricileri İçin Neden Önemli?&lt;/h2&gt;
&lt;p&gt;GA duyurusundaki kod örnekleri Python öncelikli olsa da, altta yatan altyapı dilden bağımsız — ve &lt;code&gt;azure-ai-projects&lt;/code&gt; için .NET SDK aynı pattern&amp;rsquo;leri takip ediyor. Responses API, değerlendirme framework&amp;rsquo;ü, özel ağ desteği, MCP auth — bunların hepsi .NET&amp;rsquo;ten erişilebilir.&lt;/p&gt;
&lt;p&gt;AI agent&amp;rsquo;larının &amp;ldquo;harika demo&amp;rdquo; aşamasından &amp;ldquo;bunu işte gerçekten gönderebilirim&amp;rdquo; aşamasına geçmesini bekliyorsanız, bu GA sürümü sinyaldir. Özel ağ desteği, uygun auth, sürekli değerlendirme ve üretim izleme — işte eksik olan parçalar bunlardı.&lt;/p&gt;
&lt;h2 id="son-söz"&gt;Son Söz&lt;/h2&gt;
&lt;p&gt;Foundry Agent Service şu anda kullanılabilir. SDK&amp;rsquo;yı kurun, &lt;a href="https://ai.azure.com"&gt;portal&amp;rsquo;ı&lt;/a&gt; açın ve geliştirmeye başlayın. &lt;a href="https://learn.microsoft.com/azure/foundry/quickstarts/get-started-code"&gt;Hızlı başlangıç kılavuzu&lt;/a&gt; sıfırdan çalışan bir agent&amp;rsquo;a dakikalar içinde ulaştırıyor.&lt;/p&gt;
&lt;p&gt;Tüm kod örnekleriyle birlikte tam teknik derinlemesine bakış için &lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;GA duyurusunu&lt;/a&gt; inceleyin.&lt;/p&gt;</content:encoded></item><item><title>Microsoft Agent Framework'te Arka Plan Yanıtları: Zaman Aşımı Kaygısına Son</title><link>https://thedotnetblog.com/tr/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/tr/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/</guid><description>Microsoft Agent Framework artık uzun süren AI görevlerini continuation token'larla arka plana almanıza olanak tanıyor. Arka plan yanıtlarının nasıl çalıştığını ve .NET agent'larınız için neden önemli olduğunu açıklıyoruz.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Bu yazı otomatik olarak çevrilmiştir. Orijinal için &lt;a href="https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;o3 veya GPT-5.2 gibi akıl yürütme modelleriyle bir şeyler geliştirdiyseniz, o acıyı biliyorsunuzdur. Agent&amp;rsquo;ınız karmaşık bir görev üzerinde düşünmeye başlıyor, istemci beklemeye devam ediyor ve &amp;ldquo;bu tamam&amp;rdquo; ile &amp;ldquo;çöktü mü acaba?&amp;rdquo; arasında bir yerde bağlantınız zaman aşımına uğruyor. Tüm o emek? Gitti.&lt;/p&gt;
&lt;p&gt;Microsoft Agent Framework yeni &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;arka plan yanıtlarını&lt;/a&gt; yayınladı — ve dürüst olmak gerekirse bu, ilk günden beri var olması gereken özelliklerden biri.&lt;/p&gt;
&lt;h2 id="engelleyen-çağrıların-sorunu"&gt;Engelleyen çağrıların sorunu&lt;/h2&gt;
&lt;p&gt;Geleneksel istek-yanıt kalıbında, agent işini bitirene kadar istemciniz bekler. Hızlı görevler için bu sorunsuz çalışır. Ama bir akıl yürütme modelinden derin araştırma, çok adımlı analiz veya 20 sayfalık rapor oluşturması istediğinizde? Gerçek zamanlı dakikalar söz konusu. Bu pencerede:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP bağlantıları zaman aşımına uğrayabilir&lt;/li&gt;
&lt;li&gt;Ağ kesintileri tüm işlemi mahvedebilir&lt;/li&gt;
&lt;li&gt;Kullanıcınız bir şeylerin olup olmadığını merak ederek dönen bir simgeye bakmak zorunda kalır&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Arka plan yanıtları bunu tersine çeviriyor.&lt;/p&gt;
&lt;h2 id="continuation-tokenlar-nasıl-çalışır"&gt;Continuation token&amp;rsquo;lar nasıl çalışır&lt;/h2&gt;
&lt;p&gt;Engellemek yerine, agent görevini başlatırsınız ve geriye bir &lt;strong&gt;continuation token&lt;/strong&gt; alırsınız. Bunu bir tamirhanedeki teslimat fişi gibi düşünün — tezgahın önünde beklemezsiniz, hazır olduğunda gelirsiniz.&lt;/p&gt;
&lt;p&gt;Akış basit:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;AllowBackgroundResponses = true&lt;/code&gt; ile isteğinizi gönderin&lt;/li&gt;
&lt;li&gt;Agent arka plan işlemeyi destekliyorsa bir continuation token alırsınız&lt;/li&gt;
&lt;li&gt;Token &lt;code&gt;null&lt;/code&gt; döndürene kadar kendi zamanlamanızda sorgulama yapın — bu, sonucun hazır olduğu anlamına gelir&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;.NET versiyonu şöyle:&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="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AzureOpenAIClient&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;new&lt;/span&gt; &lt;span class="n"&gt;Uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://&amp;lt;myresource&amp;gt;.openai.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="k"&gt;new&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 class="n"&gt;GetResponsesClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;lt;deployment-name&amp;gt;&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&gt;&lt;/span&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&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="c1"&gt;// Tamamlanana kadar sorgula&lt;/span&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;p&gt;Agent hemen tamamlarsa (basit görevler, arka plan işleme gerektirmeyen modeller), continuation token döndürülmez. Kodunuz sadece çalışır — özel bir işlem gerekmez.&lt;/p&gt;
&lt;h2 id="devam-ettirme-özellikli-streaming-asıl-sihir"&gt;Devam ettirme özellikli streaming: asıl sihir&lt;/h2&gt;
&lt;p&gt;Sorgulama, fırlat-unut senaryoları için uygun, ama gerçek zamanlı ilerleme izlemek istediğinizde ne olur? Arka plan yanıtları aynı zamanda yerleşik devam ettirme özelliğiyle streaming&amp;rsquo;i de destekliyor.&lt;/p&gt;
&lt;p&gt;Her streaming güncellemesi kendi continuation token&amp;rsquo;ını taşıyor. Bağlantınız streaming ortasında kesilirse, tam kaldığınız yerden devam ediyorsunuz:&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;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;AgentResponseUpdate&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="n"&gt;latestUpdate&lt;/span&gt; &lt;span class="p"&gt;=&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&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="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="k"&gt;in&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;RunStreamingAsync&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 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;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;update&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;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;latestUpdate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;update&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;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Ağ kesintisini simüle et&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="c1"&gt;// Tam kaldığımız yerden devam et&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;latestUpdate&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="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="k"&gt;in&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;RunStreamingAsync&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 class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;update&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;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;Agent, istemcinizde ne olursa olsun sunucu tarafında işlemeye devam ediyor. Bu, retry mantığı veya circuit breaker yazmadan yerleşik hata toleransı demek.&lt;/p&gt;
&lt;h2 id="bunu-gerçekten-ne-zaman-kullanmalısınız"&gt;Bunu gerçekten ne zaman kullanmalısınız&lt;/h2&gt;
&lt;p&gt;Her agent çağrısının arka plan yanıtlarına ihtiyacı yok. Hızlı tamamlamalar için gereksiz yere karmaşıklık ekliyor olursunuz. Ama bunların parlattığı durumlar şunlar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Karmaşık akıl yürütme görevleri&lt;/strong&gt; — çok adımlı analiz, derin araştırma, bir akıl yürütme modelinin gerçekten düşünmesi gereken her şey&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uzun içerik üretimi&lt;/strong&gt; — ayrıntılı raporlar, çok bölümlü belgeler, kapsamlı analizler&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Güvenilmez ağlar&lt;/strong&gt; — mobil istemciler, edge dağıtımlar, kararsız kurumsal VPN&amp;rsquo;ler&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asenkron UX kalıpları&lt;/strong&gt; — görevi gönder, başka bir şey yap, sonuçlar için geri gel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kurumsal uygulamalar geliştiren .NET geliştiricileri olarak bizim için özellikle son madde ilginç. Kullanıcının karmaşık bir rapor talep ettiği bir Blazor uygulaması düşünün — agent görevini başlatırsınız, ilerleme göstergesi gösterirsiniz ve kullanıcının çalışmaya devam etmesine izin verirsiniz. WebSocket karmaşası yok, özel kuyruk altyapısı yok, sadece bir token ve bir sorgulama döngüsü.&lt;/p&gt;
&lt;h2 id="sonuç"&gt;Sonuç&lt;/h2&gt;
&lt;p&gt;Arka plan yanıtları Microsoft Agent Framework üzerinden şu anda hem .NET hem de Python&amp;rsquo;da mevcut. Basit soru-cevabın ötesinde herhangi bir şey yapan agent&amp;rsquo;lar geliştiriyorsanız, bunu araç kutunuza eklemeye değer. Continuation token kalıbi, gerçek bir üretim sorununu çözerken işleri basit tutuyor.&lt;/p&gt;
&lt;p&gt;Tam API referansı ve daha fazla örnek için &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;belgelere&lt;/a&gt; bakın.&lt;/p&gt;</content:encoded></item></channel></rss>