<?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/pl/tags/dotnet/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>pl</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/pl/tags/dotnet/index.xml" rel="self" type="application/rss+xml"/><item><title>Hooki azd w Python, TypeScript i .NET: koniec ze skryptami shell</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/</guid><description>Azure Developer CLI obsługuje teraz hooki w Python, JavaScript, TypeScript i .NET. Koniec z przełączaniem się na Bash tylko po to, żeby uruchomić skrypt migracji.</description><content:encoded>&lt;p&gt;&lt;em&gt;Ten artykuł został przetłumaczony automatycznie. Aby zobaczyć oryginalną wersję, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Jeśli kiedykolwiek miałeś projekt w całości napisany w .NET i mimo to musiałeś pisać skrypty Bash dla hooków azd — znasz ten ból. Po co przełączać się na składnię shell w kroku pre-provisioning, skoro reszta projektu to C#?&lt;/p&gt;
&lt;p&gt;Ta frustracja ma teraz oficjalne rozwiązanie. Azure Developer CLI &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;właśnie wprowadził obsługę wielu języków dla hooków&lt;/a&gt;, i jest dokładnie tak dobre, jak brzmi.&lt;/p&gt;
&lt;h2 id="czym-są-hooki"&gt;Czym są hooki&lt;/h2&gt;
&lt;p&gt;Hooki to skrypty wykonywane w kluczowych punktach cyklu życia &lt;code&gt;azd&lt;/code&gt; — przed provisioningiem, po deploymencie i nie tylko. Definiuje się je w &lt;code&gt;azure.yaml&lt;/code&gt; i pozwalają na wstrzyknięcie własnej logiki bez modyfikowania CLI.&lt;/p&gt;
&lt;p&gt;Wcześniej obsługiwane były tylko Bash i PowerShell. Teraz można używać &lt;strong&gt;Pythona, JavaScript, TypeScript lub .NET&lt;/strong&gt; — resztą zajmuje się &lt;code&gt;azd&lt;/code&gt; automatycznie.&lt;/p&gt;
&lt;h2 id="jak-działa-wykrywanie"&gt;Jak działa wykrywanie&lt;/h2&gt;
&lt;p&gt;Wystarczy wskazać hook na plik, a &lt;code&gt;azd&lt;/code&gt; wywnioskuje język z rozszerzenia:&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;Bez dodatkowej konfiguracji. Jeśli rozszerzenie jest niejednoznaczne, można jawnie podać &lt;code&gt;kind: python&lt;/code&gt; (lub odpowiedni język).&lt;/p&gt;
&lt;h2 id="ważne-szczegóły-według-języka"&gt;Ważne szczegóły według języka&lt;/h2&gt;
&lt;h3 id="python"&gt;Python&lt;/h3&gt;
&lt;p&gt;Umieść &lt;code&gt;requirements.txt&lt;/code&gt; lub &lt;code&gt;pyproject.toml&lt;/code&gt; obok skryptu (lub w dowolnym katalogu nadrzędnym). &lt;code&gt;azd&lt;/code&gt; automatycznie tworzy środowisko wirtualne, instaluje zależności i uruchamia skrypt.&lt;/p&gt;
&lt;h3 id="javascript-i-typescript"&gt;JavaScript i TypeScript&lt;/h3&gt;
&lt;p&gt;Ten sam wzorzec — &lt;code&gt;package.json&lt;/code&gt; blisko skryptu, a &lt;code&gt;azd&lt;/code&gt; najpierw wykona &lt;code&gt;npm install&lt;/code&gt;. Dla TypeScript używa &lt;code&gt;npx tsx&lt;/code&gt; bez etapu kompilacji i bez &lt;code&gt;tsconfig.json&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="net"&gt;.NET&lt;/h3&gt;
&lt;p&gt;Dwa dostępne tryby:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tryb projektu&lt;/strong&gt;: jeśli obok skryptu jest &lt;code&gt;.csproj&lt;/code&gt;, &lt;code&gt;azd&lt;/code&gt; automatycznie uruchamia &lt;code&gt;dotnet restore&lt;/code&gt; i &lt;code&gt;dotnet build&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tryb single-file&lt;/strong&gt;: na .NET 10+ samodzielne pliki &lt;code&gt;.cs&lt;/code&gt; uruchamiają się bezpośrednio przez &lt;code&gt;dotnet run script.cs&lt;/code&gt;. Plik projektu nie jest wymagany.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="konfiguracja-dla-konkretnego-executora"&gt;Konfiguracja dla konkretnego executora&lt;/h2&gt;
&lt;p&gt;Każdy język obsługuje opcjonalny blok &lt;code&gt;config&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;hooks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/setup.ts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;packageManager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pnpm&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/migrate.cs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Release&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;framework&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;net10.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="dlaczego-to-ważne-dla-programistów-net"&gt;Dlaczego to ważne dla programistów .NET&lt;/h2&gt;
&lt;p&gt;Hooki były ostatnim miejscem w projekcie opartym na azd, które wymuszało zmianę języka. Teraz cały pipeline deploymentu — od kodu aplikacji po hooki cyklu życia — może żyć w jednym języku. Można ponownie wykorzystywać istniejące narzędzia .NET w hookach, referencować współdzielone biblioteki i porzucić utrzymywanie skryptów shell.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Jedna z tych zmian, które wydają się drobne, ale naprawdę redukują codzienne tarcia w pracy z azd. Obsługa wielu języków dla hooków jest dostępna teraz — pełna dokumentacja w &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;oficjalnym poście&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Windows App Dev CLI v0.3: F5 z terminala i UI Automation dla agentów</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/</guid><description>Windows App Development CLI v0.3 przynosi winapp run do uruchamiania i debugowania z terminala, winapp ui do automatyzacji interfejsu oraz nowy pakiet NuGet umożliwiający działanie dotnet run z zapakowanymi aplikacjami.</description><content:encoded>&lt;p&gt;&lt;em&gt;Ten artykuł został przetłumaczony automatycznie. Aby zobaczyć oryginał, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Doświadczenie F5 w Visual Studio jest świetne. Ale otwieranie VS tylko po to, żeby uruchomić i debugować zapakowaną aplikację Windows — czy to w potoku CI, zautomatyzowanym workflowie, czy gdy agent AI wykonuje testy — to zbędny narzut.&lt;/p&gt;
&lt;p&gt;Windows App Development CLI v0.3 właśnie &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;wyszło&lt;/a&gt; i rozwiązuje ten problem bezpośrednio dzięki dwóm głównym funkcjom: &lt;code&gt;winapp run&lt;/code&gt; i &lt;code&gt;winapp ui&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="winapp-run-f5-z-dowolnego-miejsca"&gt;winapp run: F5 z dowolnego miejsca&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;winapp run&lt;/code&gt; przyjmuje folder niezapakowanej aplikacji i manifest, wykonując wszystko, co VS robi przy uruchamianiu debugowania: rejestruje luźny pakiet, uruchamia aplikację i zachowuje &lt;code&gt;LocalState&lt;/code&gt; między ponownymi deploymentami.&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;# Zbuduj aplikację, a następnie uruchom ją jako zapakowaną aplikację&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;Działa dla WinUI, WPF, WinForms, Console, Avalonia i innych. Tryby są zaprojektowane zarówno dla deweloperów, jak i zautomatyzowanych workflowów:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--detach&lt;/code&gt;&lt;/strong&gt;: Uruchamia i natychmiast zwraca kontrolę do terminala. Idealny dla CI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--unregister-on-exit&lt;/code&gt;&lt;/strong&gt;: Usuwa zarejestrowany pakiet przy zamknięciu aplikacji.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--debug-output&lt;/code&gt;&lt;/strong&gt;: Przechwytuje komunikaty &lt;code&gt;OutputDebugString&lt;/code&gt; i wyjątki w czasie rzeczywistym.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="nowy-pakiet-nuget-dotnet-run-dla-zapakowanych-aplikacji"&gt;Nowy pakiet NuGet: dotnet run dla zapakowanych aplikacji&lt;/h2&gt;
&lt;p&gt;Dla deweloperów .NET jest nowy pakiet NuGet: &lt;code&gt;Microsoft.Windows.SDK.BuildTools.WinApp&lt;/code&gt;. Po instalacji &lt;code&gt;dotnet run&lt;/code&gt; obsługuje cały inner loop: budowanie, przygotowanie pakietu loose-layout, rejestrację w Windows i uruchomienie — wszystko w jednym kroku.&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;# lub&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet add package Microsoft.Windows.SDK.BuildTools.WinApp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="winapp-ui-ui-automation-z-wiersza-poleceń"&gt;winapp ui: UI Automation z wiersza poleceń&lt;/h2&gt;
&lt;p&gt;To funkcja otwierająca scenariusze agentyczne. &lt;code&gt;winapp ui&lt;/code&gt; zapewnia pełny dostęp UI Automation do dowolnej działającej aplikacji Windows — WPF, WinForms, Win32, Electron, WinUI3 — bezpośrednio z terminala.&lt;/p&gt;
&lt;p&gt;Co można robić:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Wylistować wszystkie okna najwyższego poziomu&lt;/li&gt;
&lt;li&gt;Nawigować po pełnym drzewie UI Automation dowolnego okna&lt;/li&gt;
&lt;li&gt;Wyszukiwać elementy po nazwie, typie lub ID automatyzacji&lt;/li&gt;
&lt;li&gt;Klikać, wywoływać i ustawiać wartości&lt;/li&gt;
&lt;li&gt;Robić zrzuty ekranu&lt;/li&gt;
&lt;li&gt;Czekać na pojawienie się elementów — idealne do synchronizacji testów&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Połączenie &lt;code&gt;winapp ui&lt;/code&gt; z &lt;code&gt;winapp run&lt;/code&gt; daje kompletny workflow build → uruchomienie → weryfikacja z terminala. Agent może uruchomić aplikację, sprawdzić stan UI, programowo z nią interagować i zwalidować wynik.&lt;/p&gt;
&lt;h2 id="inne-nowości"&gt;Inne nowości&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp unregister&lt;/code&gt;&lt;/strong&gt;: Usuwa sideloadowany pakiet po zakończeniu pracy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp manifest add-alias&lt;/code&gt;&lt;/strong&gt;: Dodaje alias do uruchamiania aplikacji po nazwie z terminala.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uzupełnianie tabulatorem&lt;/strong&gt;: Jedno polecenie do skonfigurowania uzupełniania w PowerShell.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="jak-zdobyć"&gt;Jak zdobyć&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;# lub&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 jest w publicznym podglądzie. Pełna dokumentacja dostępna w &lt;a href="https://github.com/microsoft/WinAppCli"&gt;repozytorium GitHub&lt;/a&gt;, a wszystkie szczegóły w &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;oryginalnym ogłoszeniu&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Przestań Pilnować Terminala: Tryb Odłączony Aspire Zmienia Przepływ Pracy</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/</guid><description>Aspire 13.2 pozwala uruchomić AppHost w tle i odzyskać terminal. W połączeniu z nowymi poleceniami CLI i obsługą agentów, to większa sprawa niż się wydaje.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Za każdym razem gdy uruchamiasz Aspire AppHost, twój terminal znika. Zablokowany. Zajęty do Ctrl+C. Chcesz uruchomić szybkie polecenie? Nowa karta. Sprawdzić logi? Kolejna karta. To małe tarcie szybko się kumuluje.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 to naprawia. James Newton-King &lt;a href="https://devblogs.microsoft.com/aspire/aspire-detached-mode-and-process-management/"&gt;opisał wszystkie szczegóły&lt;/a&gt;, i szczerze, to jedna z tych funkcji, która natychmiast zmienia sposób pracy.&lt;/p&gt;
&lt;h2 id="tryb-odłączony-jedno-polecenie-terminal-wraca"&gt;Tryb odłączony: jedno polecenie, terminal wraca&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;To skrót dla &lt;code&gt;aspire run --detach&lt;/code&gt;. Twój AppHost uruchamia się w tle i natychmiast odzyskujesz terminal.&lt;/p&gt;
&lt;h2 id="zarządzanie-tym-co-działa"&gt;Zarządzanie tym, co działa&lt;/h2&gt;
&lt;p&gt;Uruchamianie w tle jest przydatne tylko wtedy, gdy możesz faktycznie zarządzać tym, co jest uruchomione. Aspire 13.2 dostarcza pełny zestaw poleceń CLI:&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;# Lista wszystkich działających AppHostów&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;# Sprawdź stan konkretnego AppHosta&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;# Strumieniuj logi z działającego AppHosta&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;# Zatrzymaj konkretny AppHost&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire stop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="połącz-z-trybem-izolowanym"&gt;Połącz z trybem izolowanym&lt;/h2&gt;
&lt;p&gt;Tryb odłączony naturalnie łączy się z trybem izolowanym:&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;Każda instancja otrzymuje losowe porty, oddzielne sekrety i własny cykl życia.&lt;/p&gt;
&lt;h2 id="dlaczego-to-jest-ogromne-dla-agentów-kodowania"&gt;Dlaczego to jest ogromne dla agentów kodowania&lt;/h2&gt;
&lt;p&gt;Agent kodujący w twoim terminalu może teraz:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Uruchomić aplikację z &lt;code&gt;aspire start&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Zapytać o jej stan za pomocą &lt;code&gt;aspire describe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Sprawdzić logi &lt;code&gt;aspire logs&lt;/code&gt; w celu diagnozy problemów&lt;/li&gt;
&lt;li&gt;Zatrzymać ją &lt;code&gt;aspire stop&lt;/code&gt; po zakończeniu&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Uruchomienie &lt;code&gt;aspire agent init&lt;/code&gt; konfiguruje plik umiejętności Aspire, który uczy agentów tych poleceń.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Tryb odłączony to ulepszenie przepływu pracy ukryte jako prosta flaga. Przeczytaj &lt;a href="https://devblogs.microsoft.com/aspire/aspire-detached-mode-and-process-management/"&gt;pełny post&lt;/a&gt; i pobierz Aspire 13.2 z &lt;code&gt;aspire update --self&lt;/code&gt;.&lt;/p&gt;</content:encoded></item><item><title>Grupowanie Pinezek W Końcu Trafia do .NET MAUI Maps — Jedna Właściwość, Zero Bólu</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/maui-maps-pin-clustering-finally/</guid><description>.NET MAUI 11 Preview 3 dodaje natywne grupowanie pinezek do kontrolki Map. Jedna właściwość, oddzielne grupy klastrów i obsługa dotknięcia — wszystko wbudowane.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/maui-maps-pin-clustering-finally/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Znasz ten moment, gdy ładujesz mapę ze stu pinezkami i całość zamienia się w nieczytelną masę? To było doświadczenie .NET MAUI Maps — do teraz.&lt;/p&gt;
&lt;p&gt;David Ortinau &lt;a href="https://devblogs.microsoft.com/dotnet/pin-clustering-in-dotnet-maui-maps/"&gt;właśnie ogłosił&lt;/a&gt;, że .NET MAUI 11 Preview 3 dostarcza grupowanie pinezek po wyjęciu z pudełka.&lt;/p&gt;
&lt;h2 id="jedna-właściwość-do-rządzenia-wszystkimi"&gt;Jedna właściwość do rządzenia wszystkimi&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;Tyle. Pobliskie pinezki są grupowane w klastry z odznaką liczby.&lt;/p&gt;
&lt;h2 id="niezależne-grupy-klastrów"&gt;Niezależne grupy klastrów&lt;/h2&gt;
&lt;p&gt;Właściwość &lt;code&gt;ClusteringIdentifier&lt;/code&gt; pozwala oddzielić pinezki na niezależne grupy:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Pin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Label&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Pike Place Coffee&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Location&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;47.6097&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="m"&gt;122.3331&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ClusteringIdentifier&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;coffee&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="obsługa-dotknięcia-klastra"&gt;Obsługa dotknięcia klastra&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClusterClicked&lt;/span&gt; &lt;span class="p"&gt;+=&lt;/span&gt; &lt;span class="kd"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;\n&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Label&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;DisplayAlert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$&amp;#34;Cluster ({e.Pins.Count} pins)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;OK&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="zacznij"&gt;Zacznij&lt;/h2&gt;
&lt;p&gt;Zainstaluj &lt;a href="https://dotnet.microsoft.com/download/dotnet/11.0"&gt;.NET 11 Preview 3&lt;/a&gt; i zaktualizuj obciążenie .NET MAUI. &lt;a href="https://github.com/dotnet/maui-samples/tree/main/10.0/UserInterface/Views/Map/MapDemo/WorkingWithMaps"&gt;Przykład Maps&lt;/a&gt; zawiera nową stronę Clustering.&lt;/p&gt;</content:encoded></item><item><title>.NET Kwiecień 2026 Serwisowanie — Poprawki Bezpieczeństwa, Które Powinieneś Zastosować Dziś</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/dotnet-april-2026-servicing-security-patches/</guid><description>Wydanie serwisowe z kwietnia 2026 roku łata 6 CVE w .NET 10, .NET 9, .NET 8 i .NET Framework — w tym dwie luki zdalnego wykonania kodu.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/dotnet-april-2026-servicing-security-patches/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/dotnet-and-dotnet-framework-april-2026-servicing-updates/"&gt;Aktualizacje serwisowe z kwietnia 2026&lt;/a&gt; dla .NET i .NET Framework są dostępne, i ta zawiera poprawki bezpieczeństwa, które będziesz chciał zastosować wkrótce. Sześć CVE załatanych, w tym dwie luki zdalnego wykonania kodu (RCE).&lt;/p&gt;
&lt;h2 id="co-zostało-załatane"&gt;Co zostało załatane&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CVE&lt;/th&gt;
&lt;th&gt;Typ&lt;/th&gt;
&lt;th&gt;Dotyczy&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;Obejście funkcji bezpieczeństwa&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;Zdalne wykonanie kodu&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;Zdalne wykonanie kodu&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;Odmowa usługi&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;Odmowa usługi&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;Odmowa usługi&lt;/td&gt;
&lt;td&gt;.NET Framework 2.0–4.8.1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="zaktualizowane-wersje"&gt;Zaktualizowane wersje&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;.NET 10&lt;/strong&gt;: 10.0.6&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;.NET 9&lt;/strong&gt;: 9.0.15&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;.NET 8&lt;/strong&gt;: 8.0.26&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="co-zrobić"&gt;Co zrobić&lt;/h2&gt;
&lt;p&gt;Zaktualizuj swoje projekty i pipeline&amp;rsquo;y CI/CD do najnowszych wersji. Dwie luki RCE to nie jest coś, co się odkłada.&lt;/p&gt;</content:encoded></item><item><title>Azure MCP Server 2.0 Właśnie Wylądował — Samodzielnie Hostowana Agentic Cloud Automation Jest Tutaj</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</guid><description>Azure MCP Server 2.0 osiąga stabilność z samodzielnie hostowanymi zdalnymi wdrożeniami, 276 narzędziami w 57 usługach Azure i zabezpieczeniami klasy enterprise.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jeśli ostatnio budowałeś cokolwiek z MCP i Azure, pewnie wiesz, że lokalne doświadczenie działa dobrze. Ale gdy musisz udostępnić tę konfigurację całemu zespołowi? Tam rzeczy się komplikowały.&lt;/p&gt;
&lt;p&gt;Już nie. Azure MCP Server &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;osiągnął stabilną wersję 2.0&lt;/a&gt;, a główna funkcja to dokładnie to, o co prosiły zespoły enterprise: &lt;strong&gt;obsługa samodzielnie hostowanego zdalnego serwera MCP&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="co-to-jest-azure-mcp-server"&gt;Co to jest Azure MCP Server?&lt;/h2&gt;
&lt;p&gt;Azure MCP Server implementuje specyfikację &lt;a href="https://modelcontextprotocol.io/docs/getting-started/intro"&gt;Model Context Protocol&lt;/a&gt; i ujawnia możliwości Azure jako ustrukturyzowane, odkrywalne narzędzia. Liczby mówią same za siebie: &lt;strong&gt;276 narzędzi MCP w 57 usługach Azure&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="wielka-sprawa-samodzielnie-hostowane-zdalne-wdrożenia"&gt;Wielka sprawa: samodzielnie hostowane zdalne wdrożenia&lt;/h2&gt;
&lt;p&gt;W prawdziwym scenariuszu zespołowym potrzebujesz:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Wspólny dostęp dla deweloperów i wewnętrznych systemów agentów&lt;/li&gt;
&lt;li&gt;Scentralizowana konfiguracja&lt;/li&gt;
&lt;li&gt;Granice sieci i polityk enterprise&lt;/li&gt;
&lt;li&gt;Integracja z pipeline&amp;rsquo;ami CI/CD&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Azure MCP Server 2.0 rozwiązuje to wszystko. Do autoryzacji masz dwie opcje:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Managed Identity&lt;/strong&gt; — przy pracy z &lt;a href="https://aka.ms/azmcp/self-host/foundry"&gt;Microsoft Foundry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Przepływ On-Behalf-Of (OBO)&lt;/strong&gt; — delegacja OpenID Connect z rzeczywistymi uprawnieniami użytkownika&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="wzmocnienie-bezpieczeństwa"&gt;Wzmocnienie bezpieczeństwa&lt;/h2&gt;
&lt;p&gt;Wersja 2.0 dodaje silniejszą walidację punktów końcowych, ochronę przed wzorcami injection i ściślejsze kontrole izolacji.&lt;/p&gt;
&lt;h2 id="pierwsze-kroki"&gt;Pierwsze kroki&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp"&gt;GitHub Repo&lt;/a&gt;&lt;/strong&gt; — kod źródłowy, dokumenty&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; — wdrożenie w kontenerze&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/vscode"&gt;Rozszerzenie VS Code&lt;/a&gt;&lt;/strong&gt; — integracja IDE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/self-host"&gt;Przewodnik self-hosting&lt;/a&gt;&lt;/strong&gt; — flagowa funkcja 2.0&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>.NET Aspire 13.2 Chce Być Najlepszym Przyjacielem Twojego Agenta AI</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/</guid><description>Aspire 13.2 stawia wszystko na agentic development — ustrukturyzowane wyjście CLI, izolowane uruchomienia, środowiska samoleczące i pełne dane OpenTelemetry, żeby agenci AI mogli faktycznie budować, uruchamiać i obserwować twoje aplikacje.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Znasz ten moment, kiedy twój agent kodowania AI pisze świetny kod, ekscytujesz się, a potem wszystko się sypie, kiedy próbuje to &lt;em&gt;uruchomić&lt;/em&gt;? Konflikty portów, phantom processes, złe zmienne środowiskowe — nagle agent spala tokeny na rozwiązywanie problemów ze startem zamiast budować funkcje.&lt;/p&gt;
&lt;p&gt;Zespół Aspire opublikował &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;bardzo przemyślany post&lt;/a&gt; dokładnie o tym problemie, a ich odpowiedź jest przekonująca: Aspire 13.2 jest zaprojektowany nie tylko dla ludzi, ale dla agentów AI.&lt;/p&gt;
&lt;h2 id="aspire-jako-infrastruktura-agentów"&gt;Aspire jako infrastruktura agentów&lt;/h2&gt;
&lt;p&gt;Oto co Aspire 13.2 wnosi do stołu agentic development:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cały stos w typowanym kodzie.&lt;/strong&gt; AppHost definiuje pełną topologię — w kompilowanym TypeScript lub C#:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createBuilder&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;./.modules/aspire.js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;createBuilder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;postgres&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addPostgres&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pg&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;addDatabase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;catalog&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addRedis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;cache&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addNodeApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;src/index.ts&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withHttpEndpoint&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;PORT&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;postgres&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addViteApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;waitFor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;build&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Jedno polecenie do wszystkiego.&lt;/strong&gt; Zamiast żonglowania &lt;code&gt;docker compose up&lt;/code&gt;, &lt;code&gt;npm run dev&lt;/code&gt; i skryptami startowymi bazy danych — wszystko to po prostu &lt;code&gt;aspire start&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Izolowany tryb dla równoległych agentów.&lt;/strong&gt; Z &lt;code&gt;--isolated&lt;/code&gt;, każde uruchomienie Aspire dostaje własne losowe porty i oddzielne sekrety użytkownika.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Oczy agenta przez telemetrię.&lt;/strong&gt; CLI Aspire eksponuje pełne dane OpenTelemetry podczas developmentu — ślady, metryki, ustrukturyzowane logi.&lt;/p&gt;
&lt;h2 id="analogia-do-kul-w-kręglach"&gt;Analogia do kul w kręglach&lt;/h2&gt;
&lt;p&gt;Zespół Aspire używa świetnej analogii: pomyśl o Aspire jak o odbojnikach toru do kręgli dla agentów AI. Jeśli agent nie jest doskonały (a nie będzie), odbojniki nie pozwolą mu rzucać na rynsztok.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 to nie tylko framework dla aplikacji rozproszonych — staje się niezbędną infrastrukturą agentów. Przeczytaj &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;pełny post&lt;/a&gt; od zespołu Aspire.&lt;/p&gt;</content:encoded></item><item><title>Aplikacje MCP Dostają Fluent API — Buduj Bogate UI Narzędzi AI w .NET w Trzech Krokach</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/</guid><description>Nowe płynne API konfiguracji dla aplikacji MCP na Azure Functions pozwala zamienić dowolne narzędzie MCP .NET w pełną aplikację z widokami, uprawnieniami i politykami CSP.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Narzędzia MCP świetnie nadają się do dawania agentom AI możliwości. Ale co jeśli Twoje narzędzie musi coś pokazać użytkownikowi?&lt;/p&gt;
&lt;p&gt;Lilian Kasem z zespołu Azure SDK &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;przedstawiła nowe płynne API konfiguracji&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="płynne-api-w-trzech-krokach"&gt;Płynne API w trzech krokach&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Krok 1: Zdefiniuj swoją funkcję:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;[Function(nameof(HelloApp))]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;HelloApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [McpToolTrigger(&amp;#34;HelloApp&amp;#34;, &amp;#34;A simple MCP App that says hello.&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ToolInvocationContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Hello from app&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Krok 2: Promuj ją do aplikacji MCP:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ConfigureMcpTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;HelloApp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsMcpApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;assets/hello-app.html&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithTitle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello App&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithPermissions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;McpAppPermissions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClipboardWrite&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="n"&gt;McpAppPermissions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClipboardRead&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithCsp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csp&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;csp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AllowBaseUri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://www.microsoft.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ConnectTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://www.microsoft.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Krok 3: Dodaj swój widok HTML.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Dodaj pakiet:&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;Przeczytaj &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;pełny post&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Ocena Modernizacji GitHub Copilot To Najlepsze Narzędzie Migracji, Którego Jeszcze Nie Używasz</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/</guid><description>Rozszerzenie modernizacji GitHub Copilot nie tylko sugeruje zmiany kodu — produkuje pełną ocenę migracji z wykonalnymi problemami, porównaniami celów Azure i współpracującym przepływem pracy.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Migrowanie starszej aplikacji .NET Framework do nowoczesnego .NET to jedno z tych zadań, które wszyscy wiedzą, że powinni wykonać, ale nikt nie chce zaczynać.&lt;/p&gt;
&lt;p&gt;Jeffrey Fritz właśnie opublikował &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;dogłębną analizę oceny modernizacji GitHub Copilot&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="to-nie-jest-tylko-silnik-sugestii-kodu"&gt;To nie jest tylko silnik sugestii kodu&lt;/h2&gt;
&lt;p&gt;Rozszerzenie VS Code podąża za modelem &lt;strong&gt;Oceń → Planuj → Wykonaj&lt;/strong&gt;. Faza oceny analizuje całą bazę kodu i produkuje ustrukturyzowany dokument, który wszystko przechwytuje.&lt;/p&gt;
&lt;p&gt;Ocena jest przechowywana pod &lt;code&gt;.github/modernize/assessment/&lt;/code&gt;. Każde uruchomienie produkuje niezależny raport.&lt;/p&gt;
&lt;h2 id="dwa-sposoby-na-start"&gt;Dwa sposoby na start&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Zalecana ocena&lt;/strong&gt; — szybka ścieżka. Wybierz z kuratorowanych domenach (Java/.NET Upgrade, Cloud Readiness, Security).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Niestandardowa ocena&lt;/strong&gt; — ścieżka ukierunkowana. Skonfiguruj dokładnie co analizować: docelowe obliczenia (App Service, AKS, Container Apps), docelowy system operacyjny, analiza konteneryzacji.&lt;/p&gt;
&lt;h2 id="podział-problemów-jest-wykonalny"&gt;Podział problemów jest wykonalny&lt;/h2&gt;
&lt;p&gt;Każdy problem ma poziom krytyczności:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Obowiązkowy&lt;/strong&gt; — musi być naprawiony lub migracja się nie powiedzie&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Potencjalny&lt;/strong&gt; — może wpłynąć na migrację, wymaga ludzkiego osądu&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Opcjonalny&lt;/strong&gt; — zalecane ulepszenia, nie blokuje migracji&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="moje-zdanie"&gt;Moje zdanie&lt;/h2&gt;
&lt;p&gt;Jeśli masz starsze aplikacje .NET Framework, to jest &lt;em&gt;najlepsze&lt;/em&gt; narzędzie do rozpoczęcia. Sam dokument oceny jest wart poświęconego czasu.&lt;/p&gt;
&lt;p&gt;Przeczytaj &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;pełny przewodnik&lt;/a&gt; i pobierz &lt;a href="https://aka.ms/ghcp-appmod/vscode-ext"&gt;rozszerzenie VS Code&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Połącz Swoje Serwery MCP na Azure Functions z Agentami Foundry — Oto Jak</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/</guid><description>Zbuduj swój serwer MCP raz, wdróż go na Azure Functions i połącz z agentami Microsoft Foundry z właściwym uwierzytelnianiem.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jest jedna rzecz, którą kocham w ekosystemie MCP: budujesz swój serwer raz i działa wszędzie.&lt;/p&gt;
&lt;p&gt;Lily Ma z Azure SDK team &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;opublikowała praktyczny przewodnik&lt;/a&gt; dotyczący łączenia serwerów MCP wdrożonych na Azure Functions z agentami Microsoft Foundry.&lt;/p&gt;
&lt;h2 id="dlaczego-ta-kombinacja-ma-sens"&gt;Dlaczego ta kombinacja ma sens&lt;/h2&gt;
&lt;p&gt;Azure Functions daje ci skalowalną infrastrukturę, wbudowane uwierzytelnianie i bezserwerowe rozliczenia. Microsoft Foundry daje ci agentów AI, którzy mogą rozumować i działać. Połączenie obu oznacza, że twoje narzędzia stają się możliwościami agentów AI.&lt;/p&gt;
&lt;h2 id="opcje-uwierzytelniania"&gt;Opcje uwierzytelniania&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metoda&lt;/th&gt;
&lt;th&gt;Przypadek użycia&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Key-based&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Programowanie lub serwery bez Entra auth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Microsoft Entra&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Produkcja z zarządzanymi tożsamościami&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;Produkcja z kontekstem użytkownika&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nieuwierzytelnione&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dev/testowanie lub dane publiczne&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="konfiguracja"&gt;Konfiguracja&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Wdróż serwer MCP na Azure Functions&lt;/strong&gt; — próbki dla &lt;a href="https://github.com/Azure-Samples/remote-mcp-functions-dotnet"&gt;.NET&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Włącz wbudowane uwierzytelnianie MCP&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pobierz URL endpoint&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;Dodaj serwer MCP jako narzędzie w Foundry&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Przeczytaj &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;pełny przewodnik&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Tryb Izolowany Aspire Rozwiązuje Problem Konfliktów Portów w Równoległym Programowaniu</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/</guid><description>Aspire 13.2 wprowadza tryb --isolated: losowe porty, oddzielne sekrety i zero kolizji przy uruchamianiu wielu instancji tego samego AppHosta. Idealne dla agentów AI, worktrees i równoległych przepływów pracy.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jeśli próbowałeś uruchomić dwie instancje tego samego projektu jednocześnie, znasz ten ból. Port 8080 jest już zajęty.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 naprawia to jedną flagą. James Newton-King &lt;a href="https://devblogs.microsoft.com/aspire/aspire-isolated-mode-parallel-development/"&gt;opisał pełne szczegóły&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="rozwiązanie---isolated"&gt;Rozwiązanie: &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;Każde uruchomienie dostaje:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Losowe porty&lt;/strong&gt; — brak kolizji między instancjami&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Izolowane sekrety użytkownika&lt;/strong&gt; — ciągi połączeń i klucze API zostają oddzielne dla każdej instancji&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="prawdziwe-scenariusze-gdzie-to-błyszczy"&gt;Prawdziwe scenariusze gdzie to błyszczy&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Wiele checkoutów:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Terminal 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/projects/my-app-feature
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire run --isolated
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Terminal 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/projects/my-app-bugfix
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire run --isolated
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Oba działają bez konfliktów.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agenty w tle w VS Code.&lt;/strong&gt; Gdy agent w tle Copilot Chat tworzy git worktree, tryb izolowany zapewnia, że obie instancje po prostu działają.&lt;/p&gt;
&lt;h2 id="jak-to-działa-pod-maską"&gt;Jak to działa pod maską&lt;/h2&gt;
&lt;p&gt;Gdy przekażesz &lt;code&gt;--isolated&lt;/code&gt;, CLI generuje unikalny identyfikator instancji dla uruchomienia, który napędza randomizację portów i izolację sekretów.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Tryb izolowany to mała funkcja, która rozwiązuje prawdziwy, coraz bardziej powszechny problem. Zdobądź 13.2 z &lt;code&gt;aspire update --self&lt;/code&gt;.&lt;/p&gt;</content:encoded></item><item><title>C# 15 Dostaje Typy Unii — I Są Dokładnie Tym, O Co Prosiliśmy</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/csharp-15-union-types-exhaustive-matching/</guid><description>C# 15 wprowadza słowo kluczowe `union` — dyskryminowane unie egzekwowane przez kompilator z wyczerpującym dopasowaniem wzorców. Oto jak wyglądają, dlaczego mają znaczenie i jak je wypróbować.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/csharp-15-union-types-exhaustive-matching/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Na to czekałem. C# 15 wprowadza słowo kluczowe &lt;code&gt;union&lt;/code&gt; — właściwe dyskryminowane unie z wyczerpującym dopasowaniem wzorców egzekwowanym przez kompilator.&lt;/p&gt;
&lt;p&gt;Bill Wagner &lt;a href="https://devblogs.microsoft.com/dotnet/csharp-15-union-types/"&gt;opublikował głębokie omówienie&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="problem-rozwiązywany-przez-unie"&gt;Problem rozwiązywany przez unie&lt;/h2&gt;
&lt;p&gt;Przed C# 15, zwracanie &amp;ldquo;jednego z kilku możliwych typów&amp;rdquo; było zawsze kompromisem. Nigdy nie dostawałeś tego, czego naprawdę chcesz: zamkniętego zbioru typów, gdzie kompilator gwarantuje, że obsłużyłeś każdy przypadek.&lt;/p&gt;
&lt;h2 id="składnia-jest-pięknie-prosta"&gt;Składnia jest pięknie prosta&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;A oto magia — kompilator egzekwuje wyczerpujące dopasowanie:&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;Nie potrzeba &lt;code&gt;_&lt;/code&gt;. Jeśli później dodasz czwarty typ do unii, każde wyrażenie switch, które go nie obsługuje, generuje ostrzeżenie.&lt;/p&gt;
&lt;h2 id="zastosowanie-praktyczne"&gt;Zastosowanie praktyczne&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="n"&gt;union&lt;/span&gt; &lt;span class="n"&gt;ApiResult&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ApiError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ValidationFailure&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Teraz każdy konsument jest zmuszony obsłużyć sukces, błąd i niepowodzenie walidacji.&lt;/p&gt;
&lt;h2 id="wypróbuj-już-dziś"&gt;Wypróbuj już dziś&lt;/h2&gt;
&lt;p&gt;Typy unii są dostępne w .NET 11 Preview 2. Sprawdź &lt;a href="https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/union"&gt;pełną dokumentację&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 Dostarcza CLI do Dokumentacji — i Twój Agent AI Też Może Go Używać</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/</guid><description>.NET Aspire 13.2 dodaje aspire docs — CLI do wyszukiwania, przeglądania i czytania oficjalnej dokumentacji bez opuszczania terminala. Działa też jako narzędzie dla agentów AI.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Znasz ten moment, kiedy siedzisz głęboko w Aspire AppHost, łączysz integracje i musisz sprawdzić dokładnie, jakich parametrów oczekuje integracja Redis? Alt-tab do przeglądarki, szukasz na aspire.dev. Kontekst utracony.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 właśnie &lt;a href="https://devblogs.microsoft.com/aspire/aspire-docs-in-your-terminal/"&gt;dostarczył rozwiązanie&lt;/a&gt;. CLI &lt;code&gt;aspire docs&lt;/code&gt; pozwala wyszukiwać, przeglądać i czytać oficjalną dokumentację Aspire bezpośrednio z terminala.&lt;/p&gt;
&lt;h2 id="trzy-polecenia-zero-kart-przeglądarki"&gt;Trzy polecenia, zero kart przeglądarki&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Lista wszystkich dokumentów&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Szukaj tematu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs search &lt;span class="s2"&gt;&amp;#34;redis&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Przeczytaj pełną stronę&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs get redis-integration
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Tylko jedna sekcja&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs get redis-integration --section &lt;span class="s2"&gt;&amp;#34;Add Redis resource&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="kąt-agentów-ai"&gt;Kąt agentów AI&lt;/h2&gt;
&lt;p&gt;To samo sprawia, że jest to interesujące dla deweloperów budujących z narzędziami AI. Te same polecenia &lt;code&gt;aspire docs&lt;/code&gt; działają jako narzędzia dla agentów AI.&lt;/p&gt;
&lt;p&gt;Zamiast halucynować Aspire API na podstawie przestarzałych danych treningowych, agent może wywołać &lt;code&gt;aspire docs search &amp;quot;postgres&amp;quot;&lt;/code&gt;, znaleźć oficjalne dokumenty integracji i przeczytać właściwą stronę.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;aspire docs&lt;/code&gt; to mała funkcja, która czysto rozwiązuje prawdziwy problem. Zobacz &lt;a href="https://davidpine.dev/posts/aspire-docs-mcp-tools/"&gt;deep dive Davida Pine&amp;rsquo;a&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Microsoft Agent Framework osiąga wersję 1.0 — co naprawdę ważne dla programistów .NET</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/agent-framework-1-0-production-ready/</guid><description>Microsoft Agent Framework 1.0 jest gotowy do produkcji ze stabilnym API, orkiestracją wieloagentową i łącznikami dla każdego głównego dostawcy AI. Oto co musisz wiedzieć jako programista .NET.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/agent-framework-1-0-production-ready/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jeśli śledzisz historię Agent Framework od wczesnych dni Semantic Kernel i AutoGen, ta wiadomość jest znacząca. Microsoft Agent Framework właśnie &lt;a href="https://devblogs.microsoft.com/agent-framework/microsoft-agent-framework-version-1-0/"&gt;osiągnął wersję 1.0&lt;/a&gt; — gotowy do produkcji, stabilne API, zobowiązanie do długoterminowego wsparcia. Jest dostępny zarówno dla .NET, jak i Python i naprawdę gotowy na prawdziwe obciążenia.&lt;/p&gt;
&lt;p&gt;Pominę hałas ogłoszenia i skupię się na tym, co ważne, jeśli budujesz aplikacje oparte na AI w .NET.&lt;/p&gt;
&lt;h2 id="krótka-wersja"&gt;Krótka wersja&lt;/h2&gt;
&lt;p&gt;Agent Framework 1.0 łączy to, co kiedyś było Semantic Kernel i AutoGen, w jeden otwarty SDK. Jedna abstrakcja agenta. Jeden silnik orkiestracji. Wielu dostawców AI. Jeśli skakałeś między Semantic Kernel dla wzorców enterprise i AutoGen dla przepływów pracy wieloagentowych klasy badawczej, możesz przestać. To jest teraz jeden SDK.&lt;/p&gt;
&lt;h2 id="pierwsze-kroki-są-niemal-wstydliwie-proste"&gt;Pierwsze kroki są niemal wstydliwie proste&lt;/h2&gt;
&lt;p&gt;Oto działający agent w .NET:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// dotnet add package Microsoft.Agents.AI.OpenAI --prerelease&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.Agents.AI&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.Agents.AI.Foundry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Azure.Identity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;https://your-project.services.ai.azure.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetResponsesClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gpt-5.3&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsAIAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;HaikuBot&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;You are an upbeat assistant that writes beautifully.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Write a haiku about shipping 1.0.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To wszystko. Kilka linii i masz agenta AI działającego przeciwko Azure Foundry. Odpowiednik w Python jest równie zwięzły. Dodawaj narzędzia funkcji, rozmowy wieloturowe i streaming w miarę potrzeb — powierzchnia API skaluje się bez dziwactw.&lt;/p&gt;
&lt;h2 id="orkiestracja-wieloagentowa--to-jest-prawdziwa-sprawa"&gt;Orkiestracja wieloagentowa — to jest prawdziwa sprawa&lt;/h2&gt;
&lt;p&gt;Pojedynczy agent jest w porządku dla demonstracji, ale scenariusze produkcyjne zazwyczaj wymagają koordynacji. Agent Framework 1.0 dostarcza przetestowane w boju wzorce orkiestracji prosto z Microsoft Research i AutoGen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sekwencyjne&lt;/strong&gt; — agenty przetwarzają po kolei (autor → recenzent → redaktor)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Współbieżne&lt;/strong&gt; — rozgałęź do wielu agentów równolegle, zbierz wyniki&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Przekazywanie&lt;/strong&gt; — jeden agent deleguje do innego na podstawie intencji&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Czat grupowy&lt;/strong&gt; — wielu agentów dyskutuje i dochodzi do rozwiązania&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Magentic-One&lt;/strong&gt; — wzorzec wieloagentowy klasy badawczej z MSR&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wszystkie wspierają streaming, punkty kontrolne, zatwierdzenia przez człowieka w pętli oraz wstrzymanie/wznowienie. Część dotycząca punktów kontrolnych jest kluczowa — długo działające przepływy pracy przeżywają ponowne uruchomienie procesu. Dla nas, programistów .NET, którzy budowali trwałe przepływy pracy z Azure Functions, to brzmi znajomo.&lt;/p&gt;
&lt;h2 id="funkcje-które-mają-największe-znaczenie"&gt;Funkcje, które mają największe znaczenie&lt;/h2&gt;
&lt;p&gt;Oto moja lista tego, co warto znać:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Haki middleware.&lt;/strong&gt; Wiesz, jak ASP.NET Core ma potoki middleware? Ten sam koncept, ale dla wykonania agenta. Przechwytuj każdy etap — dodawaj bezpieczeństwo treści, logowanie, zasady zgodności — bez dotykania promptów agenta. To właśnie sprawia, że agenty są gotowe na środowisko enterprise.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Podłączalna pamięć.&lt;/strong&gt; Historia rozmów, trwały stan klucz-wartość, wyszukiwanie wektorowe. Wybierz backend: Foundry Agent Service, Mem0, Redis, Neo4j lub własny. Pamięć to właśnie to, co zmienia bezstanowe wywołanie LLM w agenta, który naprawdę zapamiętuje kontekst.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deklaratywne agenty YAML.&lt;/strong&gt; Zdefiniuj instrukcje, narzędzia, pamięć i topologię orkiestracji agenta w wersjonowanych plikach YAML. Ładuj i uruchamiaj jednym wywołaniem API. To zmienia zasady gry dla zespołów, które chcą iterować zachowanie agentów bez ponownego wdrażania kodu.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wsparcie A2A i MCP.&lt;/strong&gt; MCP (Model Context Protocol) pozwala agentom dynamicznie odkrywać i wywoływać zewnętrzne narzędzia. A2A (protokół Agent-to-Agent) umożliwia współpracę między różnymi środowiskami uruchomieniowymi — twoje agenty .NET mogą koordynować z agentami działającymi w innych frameworkach. Wsparcie A2A 1.0 pojawi się wkrótce.&lt;/p&gt;
&lt;h2 id="funkcje-podglądowe-warte-obserwowania"&gt;Funkcje podglądowe warte obserwowania&lt;/h2&gt;
&lt;p&gt;Niektóre funkcje zostały dostarczone jako podgląd w 1.0 — działające, ale API może się ewoluować:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DevUI&lt;/strong&gt; — lokalny debugger w przeglądarce do wizualizacji wykonania agenta, przepływów wiadomości i wywołań narzędzi w czasie rzeczywistym. Pomyśl Application Insights, ale dla rozumowania agenta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub Copilot SDK i Claude Code SDK&lt;/strong&gt; — używaj Copilot lub Claude jako narzędzia agenta bezpośrednio z kodu orkiestracji. Skomponuj agenta zdolnego do kodowania obok innych agentów w tym samym przepływie pracy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent Harness&lt;/strong&gt; — konfigurowalne lokalne środowisko uruchomieniowe dające agentom dostęp do powłoki, systemu plików i pętli wiadomości. Pomyśl agenty kodujące i wzorce automatyzacji.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skills&lt;/strong&gt; — pakiety wielokrotnego użytku z możliwościami domeny, które od razu dają agentom ustrukturyzowane umiejętności.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="migracja-z-semantic-kernel-lub-autogen"&gt;Migracja z Semantic Kernel lub AutoGen&lt;/h2&gt;
&lt;p&gt;Jeśli masz istniejący kod Semantic Kernel lub AutoGen, dostępne są dedykowane asystenty migracji, które analizują kod i generują plany migracji krok po kroku. &lt;a href="https://learn.microsoft.com/en-us/agent-framework/migration-guide/from-semantic-kernel"&gt;Przewodnik migracji z Semantic Kernel&lt;/a&gt; i &lt;a href="https://learn.microsoft.com/en-us/agent-framework/migration-guide/from-autogen"&gt;przewodnik migracji z AutoGen&lt;/a&gt; prowadzą przez wszystko.&lt;/p&gt;
&lt;p&gt;Jeśli korzystałeś z pakietów RC, uaktualnienie do 1.0 to tylko zmiana wersji.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Agent Framework 1.0 to kamień milowy produkcji, na który czekały zespoły enterprise. Stabilne API, wsparcie dla wielu dostawców, wzorce orkiestracji działające w skali i ścieżki migracji zarówno z Semantic Kernel, jak i AutoGen.&lt;/p&gt;
&lt;p&gt;Framework jest &lt;a href="https://github.com/microsoft/agent-framework"&gt;w pełni open source na GitHub&lt;/a&gt;, a możesz zacząć już dziś z &lt;code&gt;dotnet add package Microsoft.Agents.AI&lt;/code&gt;. Sprawdź &lt;a href="https://learn.microsoft.com/en-us/agent-framework/get-started/"&gt;przewodnik szybkiego startu&lt;/a&gt; i &lt;a href="https://github.com/microsoft/agent-framework"&gt;przykłady&lt;/a&gt;, by zabrać się do pracy.&lt;/p&gt;
&lt;p&gt;Jeśli czekałeś na sygnał &amp;ldquo;bezpieczne do użycia w produkcji&amp;rdquo; — to jest właśnie ten moment.&lt;/p&gt;</content:encoded></item><item><title>Aktualizacja Visual Studio z marca pozwala budować własne agenty Copilot — a narzędzie find_symbol to poważna sprawa</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/visual-studio-march-2026-custom-copilot-agents/</guid><description>Aktualizacja Visual Studio z marca 2026 dostarcza własne agenty Copilot, wielokrotnego użytku umiejętności agentów, świadome języka narzędzie find_symbol i profilowanie wspomagane przez Copilot z Test Explorer. Oto co ważne.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/visual-studio-march-2026-custom-copilot-agents/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Visual Studio właśnie otrzymało swoją najważniejszą aktualizację Copilot do tej pory. Mark Downie &lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-march-update-build-your-own-custom-agents/"&gt;ogłosił wydanie marcowe&lt;/a&gt;, a nagłówek to własne agenty — ale szczerze, narzędzie &lt;code&gt;find_symbol&lt;/code&gt; zakopane głębiej może być funkcją, która najbardziej zmieni twój przepływ pracy.&lt;/p&gt;
&lt;p&gt;Pozwól, że rozbiję to, co tu faktycznie jest.&lt;/p&gt;
&lt;h2 id="własne-agenty-copilot-w-twoim-repozytorium"&gt;Własne agenty Copilot w twoim repozytorium&lt;/h2&gt;
&lt;p&gt;Chcesz, by Copilot przestrzegał standardów kodowania twojego zespołu, uruchamiał twój potok kompilacji lub odpytywał wewnętrzną dokumentację? Teraz możesz zbudować dokładnie to.&lt;/p&gt;
&lt;p&gt;Własne agenty są definiowane jako pliki &lt;code&gt;.agent.md&lt;/code&gt;, które wrzucasz do &lt;code&gt;.github/agents/&lt;/code&gt; w swoim repozytorium. Każdy agent ma pełny dostęp do świadomości przestrzeni roboczej, zrozumienia kodu, narzędzi, preferowanego modelu i połączeń MCP z zewnętrznymi usługami. Pojawiają się w selektorze agentów obok wbudowanych.&lt;/p&gt;
&lt;p&gt;To ten sam wzorzec, który VS Code wspierał — i wspaniale zobaczyć, że Visual Studio nadrabia. Dla zespołów, które już zbudowały agenty dla VS Code, twoje pliki &lt;code&gt;.agent.md&lt;/code&gt; powinny działać w obu IDE (choć nazwy narzędzi mogą się różnić, więc testuj).&lt;/p&gt;
&lt;p&gt;Repozytorium &lt;a href="https://github.com/github/awesome-copilot"&gt;awesome-copilot&lt;/a&gt; ma konfiguracje agentów dostarczane przez społeczność, których możesz użyć jako punktów startowych.&lt;/p&gt;
&lt;h2 id="umiejętności-agentów-wielokrotnego-użytku-pakiety-instrukcji"&gt;Umiejętności agentów: wielokrotnego użytku pakiety instrukcji&lt;/h2&gt;
&lt;p&gt;Umiejętności są automatycznie wykrywane z &lt;code&gt;.github/skills/&lt;/code&gt; w twoim repozytorium lub &lt;code&gt;~/.copilot/skills/&lt;/code&gt; w twoim profilu. Każda umiejętność to plik &lt;code&gt;SKILL.md&lt;/code&gt; zgodny ze &lt;a href="https://agentskills.io/specification"&gt;specyfikacją Agent Skills&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pomyśl o umiejętnościach jak o modułowej wiedzy specjalistycznej, którą możesz mieszać i dopasowywać. Możesz mieć umiejętność dla konwencji API, inną dla wzorców testowania i jeszcze inną dla przepływu wdrożenia. Gdy umiejętność jest aktywowana, pojawia się w czacie, abyś wiedział, że jest stosowana.&lt;/p&gt;
&lt;p&gt;Jeśli używasz umiejętności w VS Code, działają one tak samo w Visual Studio teraz.&lt;/p&gt;
&lt;h2 id="find_symbol-nawigacja-z-wiedzą-o-języku-dla-agentów"&gt;find_symbol: nawigacja z wiedzą o języku dla agentów&lt;/h2&gt;
&lt;p&gt;Tu robi się naprawdę interesująco. Nowe narzędzie &lt;code&gt;find_symbol&lt;/code&gt; daje trybowi agenta Copilot faktyczną nawigację po symbolach zasilaną przez usługi językowe. Zamiast przeszukiwać kod jak tekst, agent może:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Znaleźć wszystkie odwołania do symbolu w twoim projekcie&lt;/li&gt;
&lt;li&gt;Uzyskać informacje o typach, deklaracje i metadane zakresu&lt;/li&gt;
&lt;li&gt;Nawigować po miejscach wywołania z pełną świadomością językową&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Co to oznacza w praktyce: gdy pytasz Copilot o refaktoryzację metody lub aktualizację sygnatury parametru w miejscach wywołania, może faktycznie zobaczyć strukturę twojego kodu. Koniec z sytuacjami &amp;ldquo;agent zmienił metodę, ale pominął trzy miejsca wywołania&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Obsługiwane języki to C#, C++, Razor, TypeScript i wszystko z obsługiwanym rozszerzeniem LSP. Dla programistów .NET to ogromna poprawa — bazy kodu C# z głębokimi hierarchiami typów i interfejsami ogromnie korzystają z nawigacji świadomej symboli.&lt;/p&gt;
&lt;h2 id="profilowanie-testów-z-copilot"&gt;Profilowanie testów z Copilot&lt;/h2&gt;
&lt;p&gt;W menu kontekstowym Test Explorer jest teraz polecenie &lt;strong&gt;Profiluj z Copilot&lt;/strong&gt;. Wybierz test, kliknij profiluj, a Agent Profilowania automatycznie go uruchamia i analizuje wydajność — łącząc dane użycia CPU i instrumentacji, by dostarczyć praktycznych spostrzeżeń.&lt;/p&gt;
&lt;p&gt;Koniec z ręcznym konfigurowaniem sesji profilera, uruchamianiem testu, eksportowaniem wyników i próbą odczytania wykresu płomieni. Agent robi analizę i mówi ci, co jest wolne i dlaczego. Aktualnie tylko dla .NET, co ma sens, biorąc pod uwagę głęboką integrację diagnostyki .NET w Visual Studio.&lt;/p&gt;
&lt;h2 id="wskazówki-dotyczące-wydajności-podczas-debugowania-na-żywo"&gt;Wskazówki dotyczące wydajności podczas debugowania na żywo&lt;/h2&gt;
&lt;p&gt;Optymalizacja wydajności dzieje się teraz podczas debugowania, a nie po. Gdy przechodzisz przez kod, Visual Studio wyświetla czas wykonania i sygnały wydajności inline. Widzisz wolną linię? Kliknij Wskazówkę Wydajności i poproś Copilot o sugestie optymalizacji zaraz tam.&lt;/p&gt;
&lt;p&gt;Agent Profilowania automatycznie przechwytuje dane czasu działania — czas, użycie CPU, zachowanie pamięci — a Copilot używa ich do wskazania gorących miejsc. Dzięki temu praca z wydajnością jest częścią twojego przepływu debugowania, a nie osobnym zadaniem, które ciągle odkładasz.&lt;/p&gt;
&lt;h2 id="naprawianie-luk-bezpieczeństwa-nuget-z-eksploratora-rozwiązań"&gt;Naprawianie luk bezpieczeństwa NuGet z Eksploratora rozwiązań&lt;/h2&gt;
&lt;p&gt;Gdy zostanie wykryta luka w pakiecie NuGet, zobaczysz teraz powiadomienie z linkiem &lt;strong&gt;Napraw z GitHub Copilot&lt;/strong&gt; bezpośrednio w Eksploratorze rozwiązań. Kliknij i Copilot analizuje lukę, rekomenduje odpowiednie aktualizacje pakietów i je implementuje.&lt;/p&gt;
&lt;p&gt;Dla zespołów, które mają problem z utrzymywaniem aktualnych zależności (a to właściwie wszyscy), usuwa to tarcie &amp;ldquo;wiem, że jest luka, ale wypracowanie właściwej ścieżki aktualizacji to projekt sam w sobie.&amp;rdquo;&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Własne agenty i umiejętności to nagłówek, ale &lt;code&gt;find_symbol&lt;/code&gt; to ukryty hit — fundamentalnie zmienia dokładność Copilot przy refaktoryzacji kodu .NET. W połączeniu z integracją profilowania na żywo i naprawianiem luk bezpieczeństwa, ta aktualizacja sprawia, że funkcje AI Visual Studio wydają się naprawdę praktyczne, a nie tylko gotowe do demonstracji.&lt;/p&gt;
&lt;p&gt;Pobierz &lt;a href="https://visualstudio.microsoft.com/downloads/"&gt;Visual Studio 2026 Insiders&lt;/a&gt;, by wypróbować wszystko.&lt;/p&gt;</content:encoded></item><item><title>azd Pozwala Teraz Uruchamiać i Debugować Agenty AI Lokalnie — Co Zmieniło Się w Marcu 2026</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</guid><description>Azure Developer CLI wypuścił siedem wydań w marcu 2026. Najważniejsze: lokalna pętla uruchamiania i debugowania dla agentów AI, integracja GitHub Copilot w konfiguracji projektu i obsługa Container App Jobs.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Siedem wydań w jednym miesiącu. To co zespół Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) wypchnął w marcu 2026, a główna funkcja to ta, na którą czekałem: &lt;strong&gt;lokalna pętla uruchamiania i debugowania dla agentów AI&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="uruchamiaj-i-debuguj-agenty-ai-bez-wdrażania"&gt;Uruchamiaj i debuguj agenty AI bez wdrażania&lt;/h2&gt;
&lt;p&gt;To jest ta duża. Nowe rozszerzenie &lt;code&gt;azure.ai.agents&lt;/code&gt; dodaje zestaw poleceń:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;azd ai agent run&lt;/code&gt; — uruchamia agenta lokalnie&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt; — wysyła do niego wiadomości (lokalnie lub wdrożone)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent show&lt;/code&gt; — wyświetla status kontenera i zdrowie&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt; — strumieniuje logi kontenera w czasie rzeczywistym&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wcześniej testowanie agenta AI oznaczało wdrożenie do Microsoft Foundry za każdym razem. Teraz możesz iterować lokalnie.&lt;/p&gt;
&lt;h2 id="github-copilot-szkieletuje-twój-projekt-azd"&gt;GitHub Copilot szkieletuje Twój projekt azd&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd init&lt;/code&gt; oferuje teraz opcję &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo;. Agent Copilot tworzy szkielet konfiguracji dla Twojej struktury projektu.&lt;/p&gt;
&lt;h2 id="container-app-jobs-i-ulepszenia-wdrażania"&gt;Container App Jobs i ulepszenia wdrażania&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Container App Jobs&lt;/strong&gt;: &lt;code&gt;azd&lt;/code&gt; teraz wdraża &lt;code&gt;Microsoft.App/jobs&lt;/code&gt; przez istniejącą konfigurację &lt;code&gt;host: containerapp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Konfigurowalne limity czasu wdrażania&lt;/strong&gt;: Nowa flaga &lt;code&gt;--timeout&lt;/code&gt; na &lt;code&gt;azd deploy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatyczny fallback do lokalnego buildu&lt;/strong&gt;: Gdy zdalny build ACR zawiedzie&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lokalna walidacja preflightowa&lt;/strong&gt;: Parametry Bicep są walidowane lokalnie przed wdrożeniem&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Lokalna pętla debugowania agentów AI to gwiazda tego wydania. Sprawdź &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;pełne notatki wydania&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Dashboard Aspire 13.2 Właśnie Dostał Telemetry API — i To Zmienia Wszystko</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/aspire-132-dashboard-export-telemetry/</guid><description>.NET Aspire 13.2 dostarcza mądrzejszy eksport telemetrii, programowalny API dla śladów i logów oraz ulepszenia wizualizacji GenAI. Oto dlaczego ma to znaczenie dla twojego przepływu debugowania.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-132-dashboard-export-telemetry/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jeśli budujesz rozproszone aplikacje z .NET Aspire, wiesz już, że dashboard jest najlepszą częścią całego doświadczenia. Aspire 13.2 znacznie go poprawił.&lt;/p&gt;
&lt;h2 id="eksportowanie-telemetrii-jak-normalna-osoba"&gt;Eksportowanie telemetrii jak normalna osoba&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 dodaje odpowiedni dialog &lt;strong&gt;Zarządzaj logami i telemetrią&lt;/strong&gt;, gdzie możesz:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Wyczyścić całą telemetrię&lt;/li&gt;
&lt;li&gt;Wyeksportować wybraną telemetrię do pliku ZIP w standardowym formacie OTLP/JSON&lt;/li&gt;
&lt;li&gt;Zaimportować ten ZIP do dowolnego dashboardu Aspire później&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ta ostatnia część to kluczowa funkcja. Reprodukujesz błąd, eksportujesz telemetrię, dołączasz do elementu pracy, a twój kolega może zaimportować go do własnego dashboardu.&lt;/p&gt;
&lt;h2 id="telemetry-api-to-prawdziwy-przełom"&gt;Telemetry API to prawdziwy przełom&lt;/h2&gt;
&lt;p&gt;Dashboard udostępnia teraz HTTP API pod &lt;code&gt;/api/telemetry&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/resources&lt;/code&gt; — lista zasobów z telemetrią&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/spans&lt;/code&gt; — zapytania o spany z filtrami&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/logs&lt;/code&gt; — zapytania o logi z filtrami&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/traces&lt;/code&gt; — lista śladów&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To zasila nowe polecenia CLI &lt;code&gt;aspire agent mcp&lt;/code&gt; i &lt;code&gt;aspire otel&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="telemetria-genai-staje-się-praktyczna"&gt;Telemetria GenAI staje się praktyczna&lt;/h2&gt;
&lt;p&gt;VS Code Copilot chat i Copilot CLI obsługują konfigurowanie &lt;code&gt;OTEL_EXPORTER_OTLP_ENDPOINT&lt;/code&gt; — wskaż je na dashboard Aspire i możesz obserwować, jak twoje agenty AI myślą w czasie rzeczywistym.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 zamienia dashboard z &amp;ldquo;ładnego UI do debugowania&amp;rdquo; w &amp;ldquo;programowalną platformę obserwowalności&amp;rdquo;. Sprawdź &lt;a href="https://aspire.dev"&gt;aspire.dev&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>KubeCon Europe 2026: Na Czym Powinni Naprawdę Zależeć Deweloperom .NET</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/</guid><description>Microsoft zrzucił ścianę ogłoszeń Kubernetes na KubeCon Europe 2026. Oto przefiltrowana wersja — tylko aktualizacje AKS i cloud-native, które mają znaczenie.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Znasz to uczucie, gdy spada ogromny post z ogłoszeniami i przewijasz go myśląc &amp;ldquo;fajne, ale co to dla mnie znaczy&amp;rdquo;?&lt;/p&gt;
&lt;p&gt;Microsoft właśnie opublikował &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;swoje pełne podsumowanie KubeCon Europe 2026&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="mtls-bez-podatku-service-mesh"&gt;mTLS bez podatku service mesh&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/application-network"&gt;Azure Kubernetes Application Network&lt;/a&gt; daje ci wzajemne TLS, autoryzację świadomą aplikacji i telemetrię ruchu — bez wdrażania pełnej siatki z sidecarami. Twoje API ASP.NET Core rozmawiające z robotnikami w tle — wszystko zaszyfrowane na poziomie sieci, bez żadnych zmian kodu aplikacji.&lt;/p&gt;
&lt;h2 id="obserwowalność-gpu"&gt;Obserwowalność GPU&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/managed-gpu-metrics"&gt;AKS teraz ujawnia metryki GPU natywnie&lt;/a&gt; do zarządzanego Prometheus i Grafana. Bez niestandardowych eksporterów.&lt;/p&gt;
&lt;h2 id="wieloklasterowa-sieć"&gt;Wieloklasterowa sieć&lt;/h2&gt;
&lt;p&gt;Azure Kubernetes Fleet Manager dostarcza teraz &lt;a href="https://aka.ms/kubernetes-fleet/networking/cross-cluster"&gt;sieciowanie między klastrami&lt;/a&gt; przez zarządzaną siatkę Cilium — unified connectivity, globalny rejestr usług.&lt;/p&gt;
&lt;h2 id="bezpieczniejsze-ulepszenia"&gt;Bezpieczniejsze ulepszenia&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Ulepszenia niebiesko-zielone&lt;/strong&gt; tworzą równoległy pool węzłów. &lt;strong&gt;Wycofanie puli agentów&lt;/strong&gt; pozwala ci cofnąć się do poprzedniej wersji.&lt;/p&gt;
&lt;h2 id="gdzie-zacząć"&gt;Gdzie zacząć&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Obserwowalność najpierw&lt;/strong&gt; — włącz metryki GPU i logi przepływu sieci&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wypróbuj ulepszenia niebiesko-zielone&lt;/strong&gt; — przetestuj przepływ pracy wycofywania&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pilot sieci świadomej tożsamości&lt;/strong&gt; — włącz mTLS dla jednej ścieżki usługi&lt;/li&gt;
&lt;/ol&gt;</content:encoded></item><item><title>Foundry Agent Service jest GA: Co Naprawdę Ważne dla Budowniczych Agentów .NET</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/</guid><description>Usługa Foundry Agent firmy Microsoft właśnie osiągnęła GA z prywatną siecią, Voice Live, ocenami produkcyjnymi i otwartym środowiskiem uruchomieniowym wielu modeli.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bądźmy szczerzy — budowanie prototypu agenta AI to łatwa część. Trudna część to wszystko potem.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;Foundry Agent Service właśnie osiągnął GA&lt;/a&gt;, a to wydanie jest skupione na tej luce &amp;ldquo;wszystko potem&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="zbudowany-na-responses-api"&gt;Zbudowany na Responses API&lt;/h2&gt;
&lt;p&gt;Nowej generacji Foundry Agent Service jest zbudowany na OpenAI Responses API. Architektura jest celowo otwarta — nie jesteś przywiązany do jednego dostawcy modeli.&lt;/p&gt;
&lt;h2 id="prywatna-sieć-blokada-enterprise-usunięta"&gt;Prywatna sieć: blokada enterprise usunięta&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Brak publicznego wyjścia&lt;/strong&gt; — ruch agenta nigdy nie dotyka publicznego internetu&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iniekcja kontenera/podsieci&lt;/strong&gt; do Twojej sieci&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Łączność narzędzi&lt;/strong&gt; — serwery MCP, Azure AI Search działają przez prywatne ścieżki&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="uwierzytelnianie-mcp"&gt;Uwierzytelnianie MCP&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metoda auth&lt;/th&gt;
&lt;th&gt;Kiedy używać&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Key-based&lt;/td&gt;
&lt;td&gt;Prosty wspólny dostęp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Agent Identity&lt;/td&gt;
&lt;td&gt;Service-to-service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Managed Identity&lt;/td&gt;
&lt;td&gt;Izolacja per-projekt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OAuth Identity Passthrough&lt;/td&gt;
&lt;td&gt;Delegowany dostęp użytkownika&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="voice-live"&gt;Voice Live&lt;/h2&gt;
&lt;p&gt;Voice Live składa STT, LLM i TTS w jedno zarządzane API.&lt;/p&gt;
&lt;h2 id="oceny"&gt;Oceny&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Wbudowane ewaluatory&lt;/strong&gt; — spójność, trafność, uziemienie&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Niestandardowe ewaluatory&lt;/strong&gt; — Twoja własna logika biznesowa&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ciągła ocena&lt;/strong&gt; — próbkowanie żywego ruchu produkcyjnego&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sprawdź &lt;a href="https://learn.microsoft.com/azure/foundry/quickstarts/get-started-code"&gt;przewodnik quickstart&lt;/a&gt; i &lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;ogłoszenie GA&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Odpowiedzi w Tle w Microsoft Agent Framework: Koniec z Lękiem Przed Timeoutem</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/</guid><description>Microsoft Agent Framework umożliwia teraz odciążanie długotrwałych zadań AI za pomocą tokenów kontynuacji. Oto jak działają odpowiedzi w tle i dlaczego mają znaczenie dla Twoich agentów .NET.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jeśli budowałeś cokolwiek z modelami rozumowania jak o3 lub GPT-5.2, znasz ten ból. Twój agent zaczyna przetwarzać złożone zadanie, klient czeka, a gdzieś między &amp;ldquo;to jest w porządku&amp;rdquo; a &amp;ldquo;czy to się zawiesiło?&amp;rdquo; połączenie przekracza czas.&lt;/p&gt;
&lt;p&gt;Microsoft Agent Framework właśnie dostarczył &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;odpowiedzi w tle&lt;/a&gt; — i szczerze mówiąc, to jedna z tych funkcji, która powinna istnieć od pierwszego dnia.&lt;/p&gt;
&lt;h2 id="problem-z-blokującymi-wywołaniami"&gt;Problem z blokującymi wywołaniami&lt;/h2&gt;
&lt;p&gt;W tradycyjnym wzorcu żądanie-odpowiedź klient blokuje się do momentu zakończenia przez agenta. Odpowiedzi w tle odwracają to do góry nogami.&lt;/p&gt;
&lt;h2 id="jak-działają-tokeny-kontynuacji"&gt;Jak działają tokeny kontynuacji&lt;/h2&gt;
&lt;p&gt;Zamiast blokować, uruchamiasz zadanie agenta i otrzymujesz z powrotem &lt;strong&gt;token kontynuacji&lt;/strong&gt;. Pomyśl o tym jak o numerku w garderob. Przepływ jest prosty:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Wyślij żądanie z &lt;code&gt;AllowBackgroundResponses = true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Jeśli agent obsługuje przetwarzanie w tle, otrzymujesz token kontynuacji&lt;/li&gt;
&lt;li&gt;Odpytuj według harmonogramu, aż token wróci jako &lt;code&gt;null&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentRunOptions&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AllowBackgroundResponses&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentResponse&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;Write a detailed market analysis for the Q4 product launch.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TimeSpan&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FromSeconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="kiedy-faktycznie-tego-używać"&gt;Kiedy faktycznie tego używać&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Złożone zadania rozumowania&lt;/strong&gt; — wieloetapowe analizy, głębokie badania&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Długa generacja treści&lt;/strong&gt; — szczegółowe raporty, wieloczęściowe dokumenty&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nierezualne sieci&lt;/strong&gt; — klienci mobilni, wdrożenia brzegowe&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asynchroniczne wzorce UX&lt;/strong&gt; — prześlij zadanie, zrób coś innego, wróć po wyniki&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sprawdź &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;pełną dokumentację&lt;/a&gt; po kompletny opis API.&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.112: co programiści .NET powinni naprawdę wiedzieć</title><link>https://thedotnetblog.com/pl/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/pl/posts/emiliano-montesdeoca/vscode-1-112-dotnet-developers/</guid><description>VS Code 1.112 właśnie wyszedł i jest pełen ulepszeń agentów, zintegrowanego debuggera przeglądarki, piaskownicy MCP i wsparcia dla monorepo. Oto co naprawdę ważne dla programistów .NET.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/vscode-1-112-dotnet-developers/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;VS Code 1.112 właśnie wylądował i szczerze? Ten uderza inaczej, jeśli spędzasz dni w krainie .NET. Jest wiele w &lt;a href="https://code.visualstudio.com/updates/v1_112"&gt;oficjalnych notatkach wydania&lt;/a&gt;, ale pozwól, że oszczędzę ci przewijania i skupię się na tym, co naprawdę ważne dla nas.&lt;/p&gt;
&lt;h2 id="copilot-cli-stał-się-znacznie-bardziej-użyteczny"&gt;Copilot CLI stał się znacznie bardziej użyteczny&lt;/h2&gt;
&lt;p&gt;Główny temat tego wydania to &lt;strong&gt;autonomia agentów&lt;/strong&gt; — danie Copilot więcej przestrzeni do działania bez nadzorowania każdego kroku.&lt;/p&gt;
&lt;h3 id="kierowanie-wiadomościami-i-kolejkowanie"&gt;Kierowanie wiadomościami i kolejkowanie&lt;/h3&gt;
&lt;p&gt;Znasz ten moment, gdy Copilot CLI jest w połowie zadania i zdajesz sobie sprawę, że zapomniałeś czegoś wspomnieć? Wcześniej musiałeś czekać. Teraz możesz po prostu wysyłać wiadomości, gdy żądanie jest jeszcze w toku — albo by sterować bieżącą odpowiedzią, albo kolejkować kolejne instrukcje.&lt;/p&gt;
&lt;p&gt;To ogromne dla dłuższych zadań szkieletowania &lt;code&gt;dotnet&lt;/code&gt;, gdzie obserwujesz Copilot konfigurujący projekt i myślisz &amp;ldquo;och, poczekaj, potrzebuję też MassTransit tam&amp;rdquo;.&lt;/p&gt;
&lt;h3 id="poziomy-uprawnień"&gt;Poziomy uprawnień&lt;/h3&gt;
&lt;p&gt;To jest to, na czym mi najbardziej zależy. Sesje Copilot CLI obsługują teraz trzy poziomy uprawnień:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Domyślne uprawnienia&lt;/strong&gt; — zwykły przepływ, gdzie narzędzia proszą o potwierdzenie przed uruchomieniem&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pomiń zatwierdzenia&lt;/strong&gt; — automatycznie zatwierdza wszystko i ponawia przy błędach&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autopilot&lt;/strong&gt; — pełna autonomia: zatwierdza narzędzia, odpowiada na własne pytania i kontynuuje aż do zakończenia zadania&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jeśli robisz coś jak szkieletowanie nowego API ASP.NET Core z Entity Framework, migracjami i konfiguracją Docker — tryb Autopilot oznacza, że opisujesz co chcesz i idziesz po kawę. Samo to rozgryzie.&lt;/p&gt;
&lt;p&gt;Możesz włączyć Autopilot z ustawieniem &lt;code&gt;chat.autopilot.enabled&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="podgląd-zmian-przed-delegowaniem"&gt;Podgląd zmian przed delegowaniem&lt;/h3&gt;
&lt;p&gt;Gdy delegujesz zadanie do Copilot CLI, tworzy on worktree. Wcześniej, jeśli miałeś niezatwierdzone zmiany, musiałeś sprawdzić Kontrolę źródła, by zobaczyć co zostanie dotknięte. Teraz widok Chat pokazuje oczekujące zmiany tam, zanim zdecydujesz czy je skopiować, przenieść czy zignorować.&lt;/p&gt;
&lt;p&gt;Mała rzecz, ale oszczędza ten moment &amp;ldquo;poczekaj, co miałem w stanie staging?&amp;rdquo;&lt;/p&gt;
&lt;h2 id="debuguj-aplikacje-webowe-bez-wychodzenia-z-vs-code"&gt;Debuguj aplikacje webowe bez wychodzenia z VS Code&lt;/h2&gt;
&lt;p&gt;Zintegrowana przeglądarka obsługuje teraz &lt;strong&gt;pełne debugowanie&lt;/strong&gt;. Możesz ustawiać punkty przerwania, przechodzić przez kod i inspekcjonować zmienne — wszystko wewnątrz VS Code. Koniec z przełączaniem się do Edge DevTools.&lt;/p&gt;
&lt;p&gt;Jest nowy typ debugowania &lt;code&gt;editor-browser&lt;/code&gt;, a jeśli masz już istniejące konfiguracje uruchamiania &lt;code&gt;msedge&lt;/code&gt; lub &lt;code&gt;chrome&lt;/code&gt;, migracja jest tak prosta jak zmiana pola &lt;code&gt;type&lt;/code&gt; w &lt;code&gt;launch.json&lt;/code&gt;:&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;Dla programistów Blazor to zmiana zasad gry. Już uruchamiasz &lt;code&gt;dotnet watch&lt;/code&gt; w terminalu — teraz debugowanie też pozostaje w tym samym oknie.&lt;/p&gt;
&lt;p&gt;Przeglądarka otrzymała też niezależne poziomy powiększenia (wreszcie), właściwe menu kontekstowe prawym przyciskiem i powiększenie jest zapamiętywane dla każdej witryny.&lt;/p&gt;
&lt;h2 id="piaskownica-serwerów-mcp"&gt;Piaskownica serwerów MCP&lt;/h2&gt;
&lt;p&gt;Ta kwestia ma większe znaczenie niż mogłoby się wydawać. Jeśli używasz serwerów MCP — może skonfigurowałeś własny dla zasobów Azure lub zapytań do bazy danych — działały one z tymi samymi uprawnieniami co twój proces VS Code. To oznacza pełny dostęp do systemu plików, sieci, wszystkiego.&lt;/p&gt;
&lt;p&gt;Teraz możesz je piaskownicować. W twoim &lt;code&gt;mcp.json&lt;/code&gt;:&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;Gdy piaskownicowany serwer potrzebuje dostępu do czegoś, czego nie ma, VS Code prosi o przyznanie uprawnień. Znacznie lepsze niż podejście &amp;ldquo;mam nadzieję, że nikt nic dziwnego nie zrobi&amp;rdquo;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Uwaga:&lt;/strong&gt; Piaskownicowanie jest dostępne na macOS i Linux. Wsparcie dla Windows jest w planach — zdalne scenariusze jak WSL jednak działają.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="odkrywanie-dostosowań-monorepo"&gt;Odkrywanie dostosowań monorepo&lt;/h2&gt;
&lt;p&gt;Jeśli pracujesz w monorepo (a szczerze, wiele rozwiązań enterprise .NET kończy się jako jedno), to rozwiązuje realny problem.&lt;/p&gt;
&lt;p&gt;Wcześniej, jeśli otwierałeś podfolder repozytorium, VS Code nie znajdował &lt;code&gt;copilot-instructions.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt; ani własnych umiejętności siedzących w katalogu głównym repozytorium. Teraz z ustawieniem &lt;code&gt;chat.useCustomizationsInParentRepositories&lt;/code&gt; chodzi w górę do korzenia &lt;code&gt;.git&lt;/code&gt; i odkrywa wszystko.&lt;/p&gt;
&lt;p&gt;To oznacza, że twój zespół może współdzielić instrukcje agenta, pliki promptów i własne narzędzia we wszystkich projektach w monorepo bez konieczności otwierania przez wszystkich folderu głównego.&lt;/p&gt;
&lt;h2 id="troubleshoot-do-debugowania-agentów"&gt;/troubleshoot do debugowania agentów&lt;/h2&gt;
&lt;p&gt;Kiedyś konfigurowałeś własne instrukcje lub umiejętności i zastanawiałeś się, dlaczego nie są wykrywane? Nowa umiejętność &lt;code&gt;/troubleshoot&lt;/code&gt; czyta logi debugowania agenta i mówi ci co się stało — które narzędzia były użyte lub pominięte, dlaczego instrukcje się nie załadowały i co powoduje wolne odpowiedzi.&lt;/p&gt;
&lt;p&gt;Włącz ją z:&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;Następnie po prostu wpisz &lt;code&gt;/troubleshoot dlaczego moja własna umiejętność się nie ładuje?&lt;/code&gt; w czacie.&lt;/p&gt;
&lt;p&gt;Możesz też teraz eksportować i importować te logi debugowania, co jest świetne do dzielenia się z zespołem, gdy coś nie działa zgodnie z oczekiwaniami.&lt;/p&gt;
&lt;h2 id="wsparcie-dla-obrazów-i-plików-binarnych"&gt;Wsparcie dla obrazów i plików binarnych&lt;/h2&gt;
&lt;p&gt;Agenty mogą teraz czytać pliki obrazów z dysku i pliki binarne natywnie. Pliki binarne są prezentowane w formacie hexdump, a wyjścia obrazów (jak zrzuty ekranu z zintegrowanej przeglądarki) pojawiają się w widoku karuzeli.&lt;/p&gt;
&lt;p&gt;Dla programistów .NET, pomyśl: wklej zrzut ekranu błędu interfejsu do czatu i pozwól agentowi zrozumieć, co jest nie tak, lub każ mu przeanalizować wyjście renderowania komponentu Blazor.&lt;/p&gt;
&lt;h2 id="automatyczne-odwołania-do-symboli"&gt;Automatyczne odwołania do symboli&lt;/h2&gt;
&lt;p&gt;Małe ulepszenie komfortu pracy: gdy kopiujesz nazwę symbolu (klasy, metody itp.) i wklejasz ją do czatu, VS Code teraz automatycznie konwertuje ją na odwołanie &lt;code&gt;#sym:Nazwa&lt;/code&gt;. Daje to agentowi pełny kontekst dotyczący tego symbolu bez konieczności ręcznego dodawania go.&lt;/p&gt;
&lt;p&gt;Jeśli chcesz zwykłego tekstu zamiast, użyj &lt;code&gt;Ctrl+Shift+V&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="wtyczki-można-teraz-włączaćwyłączać"&gt;Wtyczki można teraz włączać/wyłączać&lt;/h2&gt;
&lt;p&gt;Wcześniej wyłączenie serwera MCP lub wtyczki oznaczało jej odinstalowanie. Teraz możesz je przełączać — globalnie i dla każdego obszaru roboczego. Kliknij prawym przyciskiem w widoku Extensions lub Customizations i gotowe.&lt;/p&gt;
&lt;p&gt;Wtyczki z npm i pypi mogą też teraz się automatycznie aktualizować, choć poproszą o zatwierdzenie najpierw, ponieważ aktualizacje oznaczają uruchomienie nowego kodu na twoim komputerze.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;VS Code 1.112 wyraźnie mocno napiera na doświadczenie agentów — większa autonomia, lepsze debugowanie, ściślejsze bezpieczeństwo. Dla programistów .NET, zintegrowane debugowanie przeglądarki i ulepszenia Copilot CLI to wyróżniające się funkcje.&lt;/p&gt;
&lt;p&gt;Jeśli jeszcze nie próbowałeś pełnej sesji Copilot CLI w trybie Autopilot dla projektu .NET, to wydanie jest dobrym momentem na start. Pamiętaj tylko, by ustawić uprawnienia i pozwolić mu działać.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://code.visualstudio.com/updates/v1_112"&gt;Pobierz VS Code 1.112&lt;/a&gt; lub zaktualizuj z poziomu VS Code przez &lt;strong&gt;Pomoc &amp;gt; Sprawdź dostępność aktualizacji&lt;/strong&gt;.&lt;/p&gt;</content:encoded></item></channel></rss>