<?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>Python | The .NET Blog</title><link>https://thedotnetblog.com/tr/tags/python/</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>Sat, 25 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/tr/tags/python/index.xml" rel="self" type="application/rss+xml"/><item><title>Agent Framework'te CodeAct: Ajanınızın Gecikmesini Yarıya Nasıl İndirirsiniz</title><link>https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/</guid><description>CodeAct, çok adımlı araç zincirlerini tek bir sandbox kod bloğunda birleştirir — gecikmeyi %52, token kullanımını %64 azaltır.</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/codeact-agent-framework-hyperlight-50-percent-faster/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Her ajan projesinde, izlemeye bakıp &amp;ldquo;bu neden bu kadar uzun sürüyor?&amp;rdquo; diye düşündüğünüz bir an gelir. Model iyi çalışıyor. Araçlar çalışıyor. Ama tek seferinde hesaplanabilecek bir sonuç için yedi gidiş-dönüş oluyor.&lt;/p&gt;
&lt;p&gt;CodeAct&amp;rsquo;ın tam olarak çözdüğü sorun bu — ve &lt;a href="https://devblogs.microsoft.com/agent-framework/codeact-with-hyperlight/"&gt;Agent Framework ekibi yeni &lt;code&gt;agent-framework-hyperlight&lt;/code&gt; paketiyle alfa destek yayınladı&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="codeact-nedir"&gt;CodeAct Nedir?&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://arxiv.org/abs/2402.01030"&gt;CodeAct deseni&lt;/a&gt; zarifçe basittir: Modele tek tek çağrılacak araçların listesini vermek yerine, tek bir &lt;code&gt;execute_code&lt;/code&gt; aracı verin ve &lt;em&gt;planın tamamını&lt;/em&gt; kısa bir Python programı olarak ifade etmesine izin verin.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Yaklaşım&lt;/th&gt;
&lt;th&gt;Süre&lt;/th&gt;
&lt;th&gt;Token&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Geleneksel&lt;/td&gt;
&lt;td&gt;27.81s&lt;/td&gt;
&lt;td&gt;6.890&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CodeAct&lt;/td&gt;
&lt;td&gt;13.23s&lt;/td&gt;
&lt;td&gt;2.489&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;İyileştirme&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;%52.4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;%63.9&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="güvenlik-hyperlight-mikro-vmleri"&gt;Güvenlik: Hyperlight Mikro-VM&amp;rsquo;leri&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;agent-framework-hyperlight&lt;/code&gt; paketi &lt;a href="https://github.com/hyperlight-dev/hyperlight"&gt;Hyperlight&lt;/a&gt; mikro-VM&amp;rsquo;leri kullanır. Her &lt;code&gt;execute_code&lt;/code&gt; çağrısı kendi yeni mikro-VM&amp;rsquo;ini alır. Başlatma milisaniyelerle ölçülür. İzolasyon neredeyse ücretsizdir.&lt;/p&gt;
&lt;p&gt;Araçlarınız ana bilgisayarda çalışmaya devam eder. Modelin oluşturduğu &lt;em&gt;yapıştırıcı kod&lt;/em&gt; sandbox&amp;rsquo;ta çalışır. Bu doğru ayrımdır.&lt;/p&gt;
&lt;h2 id="minimum-kurulum"&gt;Minimum Kurulum&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;agent_framework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;agent_framework_hyperlight&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;HyperlightCodeActProvider&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;codeact&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HyperlightCodeActProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;get_weather&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;approval_mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;never_require&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;CodeActAgent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;You are a helpful assistant.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;context_providers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;codeact&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="codeact-ne-zaman-kullanılır-ne-zaman-kullanılmaz"&gt;CodeAct Ne Zaman Kullanılır (Ne Zaman Kullanılmaz)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;CodeAct kullanın:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Görev birçok küçük araç çağrısını zincirliyor (aramalar, birleştirmeler, hesaplamalar)&lt;/li&gt;
&lt;li&gt;Gecikme ve token maliyeti önemliyse&lt;/li&gt;
&lt;li&gt;Model tarafından oluşturulan kod için güçlü izolasyon istiyorsanız&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Geleneksel araç çağrısında kalın:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ajan tur başına yalnızca bir iki araç çağrısı yapıyorsa&lt;/li&gt;
&lt;li&gt;Her çağrının bireysel onay gerektiren yan etkileri varsa&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="şimdi-deneyin"&gt;Şimdi Deneyin&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install agent-framework-hyperlight --pre
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/agent-framework/codeact-with-hyperlight/"&gt;Agent Framework blogundaki tam gönderiyi&lt;/a&gt; okuyun.&lt;/p&gt;</content:encoded></item><item><title>Ajanınız Şeyleri Nerede Hatırlıyor? Sohbet Geçmişi Depolama için Pratik Rehber</title><link>https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/tr/posts/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</guid><description>Servis tarafından mı yoksa istemci tarafından mı yönetiliyor? Doğrusal mı yoksa dallanma destekli mi? AI ajanınızın ne yapabileceğini belirleyen mimari karar — C# ve Python örnekleriyle.</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/chat-history-storage-patterns-agent-framework/"&gt;buraya tıklayın&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Bir AI ajanı oluştururken enerjinizin büyük bölümünü modele, araçlara ve istemlere harcarsınız. &lt;em&gt;Konuşma geçmişinin nerede tutulduğu&lt;/em&gt; sorusu bir uygulama ayrıntısı gibi görünür — ancak alacağınız en önemli mimari kararlardan biridir.&lt;/p&gt;
&lt;p&gt;Kullanıcıların konuşmaları dallandırıp dallandıramayacağını, yanıtları geri alıp alamayacağını, yeniden başlatmadan sonra oturumları devam ettirip ettiremeyeceğini ve verilerinizin altyapınızı terk edip etmediğini belirler. &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;Agent Framework ekibi derinlemesine bir analiz yayımladı&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="iki-temel-desen"&gt;İki temel desen&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Servis tarafından yönetilen&lt;/strong&gt;: AI servisi konuşma durumunu depolar. Uygulamanız bir referans tutar ve servis her istekte ilgili geçmişi otomatik olarak ekler.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;İstemci tarafından yönetilen&lt;/strong&gt;: Uygulamanız tam geçmişi tutar ve her istekte ilgili mesajları gönderir. Servis durumsuzdur. Her şeyi siz kontrol edersiniz.&lt;/p&gt;
&lt;h2 id="agent-framework-bunu-nasıl-soyutlar"&gt;Agent Framework bunu nasıl soyutlar&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Adım Alice.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Benim adım ne?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_session&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Adım Alice.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Benim adım ne?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="sağlayıcı-hızlı-referans"&gt;Sağlayıcı hızlı referans&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sağlayıcı&lt;/th&gt;
&lt;th&gt;Depolama&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Sıkıştırma&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI/Azure Chat Completions&lt;/td&gt;
&lt;td&gt;İstemci&lt;/td&gt;
&lt;td&gt;Yok&lt;/td&gt;
&lt;td&gt;Siz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foundry Agent Service&lt;/td&gt;
&lt;td&gt;Servis&lt;/td&gt;
&lt;td&gt;Doğrusal&lt;/td&gt;
&lt;td&gt;Servis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responses API (varsayılan)&lt;/td&gt;
&lt;td&gt;Servis&lt;/td&gt;
&lt;td&gt;Dallanma&lt;/td&gt;
&lt;td&gt;Servis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic Claude, Ollama&lt;/td&gt;
&lt;td&gt;İstemci&lt;/td&gt;
&lt;td&gt;Yok&lt;/td&gt;
&lt;td&gt;Siz&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="nasıl-seçilir"&gt;Nasıl seçilir&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Dallanma veya &amp;ldquo;geri al&amp;rdquo; gerekiyor mu?&lt;/strong&gt; → Servis tarafından yönetilen Responses API&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Veri egemenliği gerekiyor mu?&lt;/strong&gt; → DB destekli istemci tarafından yönetilen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Basit bir sohbet botu mu?&lt;/strong&gt; → Servis tarafından yönetilen doğrusal yeterli&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tam karar ağacı için &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;tam makaleyi&lt;/a&gt; okuyun.&lt;/p&gt;</content:encoded></item><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></channel></rss>