<?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>Cli | The .NET Blog</title><link>https://thedotnetblog.com/ru/tags/cli/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>ru</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Wed, 27 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/ru/tags/cli/index.xml" rel="self" type="application/rss+xml"/><item><title>dotnet new WinUI: Создавайте Windows-приложения без Visual Studio</title><link>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/dotnet-new-winui-templates-cli-vscode/</link><pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/dotnet-new-winui-templates-cli-vscode/</guid><description>Шаблоны проектов WinUI теперь работают с dotnet new — пустые приложения, шаблоны NavigationView и многое другое. Поддержка VS Code, Visual Studio не нужен, с настройками Fluent Design по умолчанию.</description><content:encoded>&lt;p&gt;Раньше для разработки WinUI требовался Visual Studio. Это меняется: Microsoft опубликовала шаблоны проектов и элементов с открытым исходным кодом для WinUI, которые работают с &lt;code&gt;dotnet new&lt;/code&gt;, интегрируя разработку Windows-приложений в стандартный рабочий процесс CLI.&lt;/p&gt;
&lt;h2 id="начало-работы-в-три-команды"&gt;Начало работы в три команды&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Установка шаблонов&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet new install Microsoft.WindowsAppSDK.WinUI.CSharp.Templates
&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;# Создание приложения NavigationView&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet new winui-navview -n MyApp
&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;# Запуск&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; MyApp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Никакого Visual Studio, никакой ручной настройки проекта. Приложение запускается через &lt;code&gt;dotnet run&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="что-включено"&gt;Что включено&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Пустой шаблон&lt;/strong&gt; (&lt;code&gt;dotnet new winui&lt;/code&gt;) — современная отправная точка с уже настроенной заголовочной панелью Fluent, обновлённой иконкой приложения с ресурсом &lt;code&gt;.ico&lt;/code&gt; и правильными настройками светлого/тёмного режима по умолчанию. Лучше старого пустого шаблона, где нужно было самому настраивать основы.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Шаблон NavigationView&lt;/strong&gt; (&lt;code&gt;dotnet new winui-navview&lt;/code&gt;) — паттерн навигации «ведущий-детальный», полностью настроенный с NavigationView, современной заголовочной панелью и многостраничной структурой навигации. Следует стандартному силуэту Windows-приложений для приложений на основе навигации. Если вы строите что-то с боковой навигацией, начните отсюда.&lt;/p&gt;
&lt;p&gt;Оба шаблона следуют &lt;a href="https://learn.microsoft.com/windows/apps/design/basics/app-silhouette"&gt;силуэтам Windows-приложений&lt;/a&gt; — современным паттернам Fluent Design для макета, навигации и визуальной структуры — прямо из коробки.&lt;/p&gt;
&lt;h2 id="почему-это-важно-для-разработчиков-не-на-visual-studio"&gt;Почему это важно для разработчиков не на Visual Studio&lt;/h2&gt;
&lt;p&gt;Разработчики WinUI, использующие VS Code, Rider или инструменты командной строки, были в невыгодном положении. Существующие шаблоны Visual Studio нельзя было использовать вне VS — приходилось вручную воссоздавать структуру проекта и настраивать основы.&lt;/p&gt;
&lt;p&gt;Эти шаблоны имеют открытый исходный код (см. &lt;a href="https://github.com/microsoft/WindowsAppSDK/pull/6407"&gt;WindowsAppSDK PR #6407&lt;/a&gt;), разработаны на основе &lt;a href="https://github.com/microsoft/microsoft-ui-xaml/issues/10388"&gt;отзывов сообщества&lt;/a&gt; и доступны прямо сейчас. Поддержка Visual Studio в разработке — эти же шаблоны в конечном счёте будут работать и там.&lt;/p&gt;
&lt;p&gt;Для команд, которые хотят автоматизировать настройку проектов WinUI, интегрировать её в CI или просто использовать редактор, отличный от Visual Studio, это существенное улучшение.&lt;/p&gt;
&lt;p&gt;Оригинальный пост: &lt;a href="https://devblogs.microsoft.com/ifdef-windows/introducing-dotnet-new-templates-for-winui/"&gt;Introducing dotnet new WinUI templates&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Cosmos DB Shell В Публичной Предварительной Версии — И В Нём Встроен MCP-Сервер</title><link>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/cosmosdb-shell-public-preview-mcp-server-cli/</link><pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/cosmosdb-shell-public-preview-mcp-server-cli/</guid><description>Azure Cosmos DB Shell — это новый CLI с открытым исходным кодом, который предоставляет команды базы данных как инструменты MCP. Ваши ИИ-агенты могут навигировать по контейнерам, выполнять запросы и управлять данными, используя тот же интерфейс, что используете вы.</description><content:encoded>&lt;p&gt;Если вы когда-либо вынуждены были переключаться между вкладкой портала, примером SDK и незаконченным скриптом только для ответа на один вопрос о Cosmos DB, вы уже знаете трение, которое этот проект призван устранить.&lt;/p&gt;
&lt;p&gt;Azure Cosmos DB Shell только что вошёл в публичную предварительную версию. Это CLI с открытым исходным кодом с bash-подобным синтаксисом и — часть, которая делает это интересным — встроенным MCP-сервером.&lt;/p&gt;
&lt;h2 id="что-отличает-его-от-других-cli-баз-данных"&gt;Что Отличает Его от Других CLI Баз Данных&lt;/h2&gt;
&lt;p&gt;CLI сам по себе полезен: знакомые команды, поддержка скриптов, интеграция CI/CD. Эта часть — минимальный стандарт для инструмента базы данных, ориентированного на разработчиков.&lt;/p&gt;
&lt;p&gt;Интересная часть — интеграция MCP-сервера. Каждая команда, которую предоставляет CLI, становится доступной как MCP-инструмент, который ваши ИИ-агенты могут вызывать. Нет пользовательского API-слоя, нет кода интеграции для написания. Ваш агент может:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Навигировать по иерархиям баз данных с помощью &lt;code&gt;cd&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;pwd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Выполнять SQL-запросы с помощью &lt;code&gt;query&lt;/code&gt; и получать структурированные результаты&lt;/li&gt;
&lt;li&gt;Создавать и изменять элементы с помощью &lt;code&gt;create item&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;rm&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Управлять базами данных и контейнерами с помощью &lt;code&gt;mkdb&lt;/code&gt;, &lt;code&gt;mkcon&lt;/code&gt;, &lt;code&gt;rmdb&lt;/code&gt;, &lt;code&gt;rmcon&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Инспектировать текущий контекст с помощью &lt;code&gt;endpoint&lt;/code&gt;, &lt;code&gt;pwd&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ключевое изменение: ваш агент не общается с API Cosmos DB — он общается с тем же интерфейсом оболочки, который используете вы. Команды детерминированы, поддаются аудиту и имеют открытый исходный код, так что вы можете проверить, что именно происходит.&lt;/p&gt;
&lt;h2 id="основа-с-открытым-исходным-кодом-важна"&gt;Основа с Открытым Исходным Кодом Важна&lt;/h2&gt;
&lt;p&gt;Это не управляемый сервис &amp;ldquo;чёрного ящика&amp;rdquo;. Оболочка имеет открытый исходный код, что означает:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Команды безопасности могут проверять реализацию&lt;/li&gt;
&lt;li&gt;Команды платформы могут форкнуть и расширить её для своих специфических стандартов&lt;/li&gt;
&lt;li&gt;Разработчики могут вносить улучшения, которые принесут пользу всем&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Для корпоративных команд, внедряющих инструменты ИИ, &amp;ldquo;можем ли мы точно видеть, как это работает&amp;rdquo; всё реже является необязательным требованием. Открытый исходный код здесь — значимое отличие.&lt;/p&gt;
&lt;h2 id="три-сценария-которые-становятся-проще"&gt;Три Сценария, Которые Становятся Проще&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Интеллектуальный анализ данных&lt;/strong&gt; — подключите агента к оболочке, задавайте вопросы на естественном языке, получайте структурированные результаты запросов. Агент обрабатывает построение запроса; оболочка обрабатывает выполнение.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Автономное управление данными&lt;/strong&gt; — рабочие процессы, которым необходимо создавать, обновлять или удалять данные в Cosmos DB, могут делать это через MCP-инструменты без необходимости пользовательской интеграции.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Мониторинг и оповещения в реальном времени&lt;/strong&gt; — агент может периодически запрашивать контейнеры, сравнивать результаты и выявлять аномалии через подходящий канал уведомлений.&lt;/p&gt;
&lt;p&gt;Интерфейс MCP делает эти сценарии компонуемыми с любой ИИ-платформой, поддерживающей MCP — не только с инструментами Microsoft.&lt;/p&gt;
&lt;h2 id="с-чего-начать"&gt;С Чего Начать&lt;/h2&gt;
&lt;p&gt;Оболочка находится в публичной предварительной версии. Установите её, настройте подключение к Cosmos DB и включите MCP-сервер. После этого любой совместимый с MCP хост агента может обнаружить и использовать инструменты.&lt;/p&gt;
&lt;p&gt;Оригинальный пост: &lt;a href="https://devblogs.microsoft.com/cosmosdb/azure-cosmos-db-shell-public-preview-ai-mcp-cli/"&gt;Announcing the Public Preview of Azure Cosmos DB Shell: Open-Source Power Meets AI-Driven Database Automation&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Windows App Dev CLI v0.3: F5 из терминала и UI-автоматизация для агентов</title><link>https://thedotnetblog.com/ru/news/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/ru/news/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/</guid><description>Windows App Development CLI v0.3 принес winapp run для отладочного запуска из терминала, winapp ui для автоматизации интерфейса и новый NuGet-пакет, позволяющий dotnet run работать с упакованными приложениями.</description><content:encoded>&lt;p&gt;&lt;em&gt;Этот пост был автоматически переведён. Оригинал можно найти &lt;a href="https://thedotnetblog.com/ru/news/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/"&gt;здесь&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Опыт F5 в Visual Studio великолепен. Но открывать VS только для запуска и отладки упакованного Windows-приложения — это лишнее, особенно в CI-пайплайне, автоматизированном воркфлоу или когда AI-агент прогоняет тесты.&lt;/p&gt;
&lt;p&gt;Windows App Development CLI v0.3 только что &lt;a href="https://devblogs.microsoft.com/ifdef-windows/windows-app-development-cli-v0-3-new-run-and-ui-commands-plus-dotnet-run-support-for-packaged-apps/"&gt;вышел&lt;/a&gt; и решает это напрямую с двумя ключевыми функциями: &lt;code&gt;winapp run&lt;/code&gt; и &lt;code&gt;winapp ui&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="winapp-run-f5-из-любого-места"&gt;winapp run: F5 из любого места&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;winapp run&lt;/code&gt; принимает папку распакованного приложения и манифест, выполняя всё то, что VS делает при отладочном запуске: регистрирует loose-пакет, запускает приложение и сохраняет &lt;code&gt;LocalState&lt;/code&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;# Собери приложение, затем запусти как упакованное&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;winapp run ./bin/Debug
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Работает для WinUI, WPF, WinForms, Console, Avalonia и других. Режимы рассчитаны как на разработчиков, так и на автоматизированные воркфлоу:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--detach&lt;/code&gt;&lt;/strong&gt;: Запускает и немедленно возвращает управление терминалу. Идеально для CI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--unregister-on-exit&lt;/code&gt;&lt;/strong&gt;: Удаляет зарегистрированный пакет при закрытии приложения.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--debug-output&lt;/code&gt;&lt;/strong&gt;: Захватывает сообщения &lt;code&gt;OutputDebugString&lt;/code&gt; и исключения в реальном времени.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="новый-nuget-пакет-dotnet-run-для-упакованных-приложений"&gt;Новый NuGet-пакет: dotnet run для упакованных приложений&lt;/h2&gt;
&lt;p&gt;Для .NET-разработчиков появился новый NuGet-пакет: &lt;code&gt;Microsoft.Windows.SDK.BuildTools.WinApp&lt;/code&gt;. После установки &lt;code&gt;dotnet run&lt;/code&gt; берёт на себя весь inner loop: сборка, подготовка loose-layout-пакета, регистрация в Windows и запуск — всё в один шаг.&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;# или&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-автоматизация-из-командной-строки"&gt;winapp ui: UI-автоматизация из командной строки&lt;/h2&gt;
&lt;p&gt;Это функция, открывающая агентные сценарии. &lt;code&gt;winapp ui&lt;/code&gt; предоставляет полный доступ UI Automation к любому запущенному Windows-приложению — WPF, WinForms, Win32, Electron, WinUI3 — прямо из терминала.&lt;/p&gt;
&lt;p&gt;Что можно делать:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Перечислить все окна верхнего уровня&lt;/li&gt;
&lt;li&gt;Обходить полное дерево UI Automation любого окна&lt;/li&gt;
&lt;li&gt;Искать элементы по имени, типу или ID автоматизации&lt;/li&gt;
&lt;li&gt;Кликать, вызывать и устанавливать значения&lt;/li&gt;
&lt;li&gt;Делать снимки экрана&lt;/li&gt;
&lt;li&gt;Ждать появления элементов — идеально для синхронизации тестов&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Сочетание &lt;code&gt;winapp ui&lt;/code&gt; с &lt;code&gt;winapp run&lt;/code&gt; создаёт полный воркфлоу build → запуск → проверка из терминала. Агент может запустить приложение, проверить состояние UI, программно взаимодействовать с ним и валидировать результат.&lt;/p&gt;
&lt;h2 id="другие-нововведения"&gt;Другие нововведения&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp unregister&lt;/code&gt;&lt;/strong&gt;: Удаляет sideloaded-пакет после завершения работы.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp manifest add-alias&lt;/code&gt;&lt;/strong&gt;: Добавляет алиас для запуска приложения по имени из терминала.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Автодополнение&lt;/strong&gt;: Одна команда для настройки дополнения в PowerShell.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="как-получить"&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;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;# или&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 находится в публичном превью. Полная документация — в &lt;a href="https://github.com/microsoft/WinAppCli"&gt;репозитории на GitHub&lt;/a&gt;, все подробности — в &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;оригинальном анонсе&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Хватит нянчить терминал: отсоединённый режим Aspire меняет рабочий процесс</title><link>https://thedotnetblog.com/ru/news/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/ru/news/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/</guid><description>Aspire 13.2 позволяет запускать AppHost в фоновом режиме и освобождать терминал. В сочетании с новыми командами CLI и поддержкой агентов это значит больше, чем кажется.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Этот пост был переведён автоматически. Оригинал можно прочитать &lt;a href="https://thedotnetblog.com/ru/news/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/"&gt;здесь&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Каждый раз, когда вы запускаете Aspire AppHost, ваш терминал пропадает. Заблокирован. Занят, пока вы не нажмёте Ctrl+C. Нужно быстро выполнить команду? Откройте ещё одну вкладку. Хотите проверить логи? Ещё одна вкладка. Мелкое неудобство, которое быстро накапливается.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 решает эту проблему. James Newton-King &lt;a href="https://devblogs.microsoft.com/aspire/aspire-detached-mode-and-process-management/"&gt;описал все подробности&lt;/a&gt;, и, честно говоря, это одна из тех фич, которая сразу меняет подход к работе.&lt;/p&gt;
&lt;h2 id="отсоединённый-режим-одна-команда--терминал-свободен"&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 start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Это сокращение для &lt;code&gt;aspire run --detach&lt;/code&gt;. Ваш AppHost запускается в фоне, и терминал сразу возвращается к вам. Никаких лишних вкладок. Никаких мультиплексоров терминала. Просто ваш промпт, готовый к работе.&lt;/p&gt;
&lt;h2 id="управление-запущенными-процессами"&gt;Управление запущенными процессами&lt;/h2&gt;
&lt;p&gt;Суть в том, что запуск в фоне полезен только тогда, когда вы можете управлять тем, что работает. Aspire 13.2 поставляется с полным набором 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;# List all running AppHosts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire ps
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Inspect the state of a specific AppHost&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire describe
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Stream logs from a running AppHost&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire logs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Stop a specific 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;p&gt;Это превращает Aspire CLI в полноценный менеджер процессов. Вы можете запускать несколько AppHost, проверять их статус, отслеживать логи и останавливать их — всё из одной сессии терминала.&lt;/p&gt;
&lt;h2 id="сочетание-с-изолированным-режимом"&gt;Сочетание с изолированным режимом&lt;/h2&gt;
&lt;p&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;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;Каждый получает случайные порты, отдельные секреты и собственный жизненный цикл. Используйте &lt;code&gt;aspire ps&lt;/code&gt;, чтобы увидеть оба, &lt;code&gt;aspire stop&lt;/code&gt;, чтобы остановить ненужный.&lt;/p&gt;
&lt;h2 id="почему-это-важно-для-агентов-кода"&gt;Почему это важно для агентов кода&lt;/h2&gt;
&lt;p&gt;Вот тут становится по-настоящему интересно. Агент кода, работающий в вашем терминале, теперь может:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Запустить приложение с помощью &lt;code&gt;aspire start&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Запросить его состояние через &lt;code&gt;aspire describe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Проверить логи через &lt;code&gt;aspire logs&lt;/code&gt; для диагностики проблем&lt;/li&gt;
&lt;li&gt;Остановить его командой &lt;code&gt;aspire stop&lt;/code&gt; по завершении&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Всё это без потери сессии терминала. До появления отсоединённого режима агент, запустивший ваш AppHost, блокировал сам себя в собственном терминале. Теперь он может запускать, наблюдать, итерировать и очищать — именно так, как должен работать автономный агент.&lt;/p&gt;
&lt;p&gt;Команда Aspire серьёзно вложилась в это. Запуск &lt;code&gt;aspire agent init&lt;/code&gt; настраивает файл навыков Aspire, который обучает агентов этим командам. Таким образом, инструменты вроде агента кода Copilot могут управлять вашими рабочими нагрузками Aspire из коробки.&lt;/p&gt;
&lt;h2 id="подводя-итог"&gt;Подводя итог&lt;/h2&gt;
&lt;p&gt;Отсоединённый режим — это улучшение рабочего процесса, замаскированное под простой флаг. Вы перестаёте переключаться между терминалами, агенты перестают блокировать сами себя, а новые CLI-команды дают реальную видимость того, что запущено. Это практично, это чисто, и это делает ежедневный цикл разработки заметно более плавным.&lt;/p&gt;
&lt;p&gt;Прочитайте &lt;a href="https://devblogs.microsoft.com/aspire/aspire-detached-mode-and-process-management/"&gt;полный пост&lt;/a&gt; для всех подробностей и установите Aspire 13.2 командой &lt;code&gt;aspire update --self&lt;/code&gt;.&lt;/p&gt;</content:encoded></item><item><title>azd update — Одна команда для всех ваших пакетных менеджеров</title><link>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/</guid><description>Azure Developer CLI теперь имеет универсальную команду обновления, которая работает независимо от способа установки — winget, Homebrew, Chocolatey или скрипт установки.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Этот пост был переведён автоматически. Оригинальная версия доступна &lt;a href="https://thedotnetblog.com/ru/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/"&gt;здесь&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Знаете это сообщение «Доступна новая версия azd», которое появляется каждые несколько недель? То самое, которое вы закрываете, потому что не помните, устанавливали ли вы &lt;code&gt;azd&lt;/code&gt; через winget, Homebrew или тот curl-скрипт, который запустили полгода назад? Так вот, это наконец-то исправлено.&lt;/p&gt;
&lt;p&gt;Microsoft выпустила &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;&lt;code&gt;azd update&lt;/code&gt;&lt;/a&gt; — единую команду, которая обновляет Azure Developer CLI до последней версии независимо от того, как вы её изначально установили. Windows, macOS, Linux — неважно. Одна команда.&lt;/p&gt;
&lt;h2 id="как-это-работает"&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;azd update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Вот и всё. Если хотите ранний доступ к новым возможностям, можно переключиться на ежедневную Insiders-сборку:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update --channel daily
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update --channel stable
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Команда определяет текущий метод установки и использует подходящий механизм обновления под капотом. Больше никаких «подожди, я на этой машине winget или choco использовал?»&lt;/p&gt;
&lt;h2 id="небольшой-нюанс"&gt;Небольшой нюанс&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd update&lt;/code&gt; доступна начиная с версии 1.23.x. Если у вас более старая версия, придётся выполнить последнее ручное обновление через исходный метод установки. После этого &lt;code&gt;azd update&lt;/code&gt; берёт всё на себя.&lt;/p&gt;
&lt;p&gt;Проверьте текущую версию командой &lt;code&gt;azd version&lt;/code&gt;. Если нужна чистая установка, &lt;a href="https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd"&gt;документация по установке&lt;/a&gt; вам поможет.&lt;/p&gt;
&lt;h2 id="почему-это-важно"&gt;Почему это важно&lt;/h2&gt;
&lt;p&gt;Это небольшое улучшение качества жизни, но для тех из нас, кто ежедневно использует &lt;code&gt;azd&lt;/code&gt; для деплоя ИИ-агентов и Aspire-приложений в Azure, быть на последней версии означает меньше моментов «этот баг уже был исправлен в последнем релизе». На одну заботу меньше.&lt;/p&gt;
&lt;p&gt;Читайте &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;полный анонс&lt;/a&gt; и &lt;a href="https://blog.jongallant.com/2026/04/azd-update"&gt;подробный разбор&lt;/a&gt; Джона Галланта для дополнительного контекста.&lt;/p&gt;</content:encoded></item><item><title>.NET Aspire 13.2 хочет стать лучшим другом вашего ИИ-агента</title><link>https://thedotnetblog.com/ru/news/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/ru/news/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/</guid><description>Aspire 13.2 делает ставку на агентную разработку — структурированный вывод CLI, изолированные запуски, самовосстанавливающиеся среды и полные данные OpenTelemetry, чтобы ваши ИИ-агенты могли по-настоящему строить, запускать и наблюдать за вашими приложениями.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Этот пост был переведён автоматически. Оригинал можно прочитать &lt;a href="https://thedotnetblog.com/ru/news/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/"&gt;здесь&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Знаете тот момент, когда ваш ИИ-агент пишет отличный код, вы воодушевляетесь, а потом всё разваливается, когда он пытается это &lt;em&gt;запустить&lt;/em&gt;? Конфликты портов, процессы-призраки, неправильные переменные окружения — внезапно ваш агент сжигает токены на устранение проблем при запуске вместо создания функциональности.&lt;/p&gt;
&lt;p&gt;Команда Aspire только что опубликовала &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;очень продуманный пост&lt;/a&gt; именно об этой проблеме, и их ответ убедителен: Aspire 13.2 спроектирован не только для людей, но и для ИИ-агентов.&lt;/p&gt;
&lt;h2 id="проблема-реальна"&gt;Проблема реальна&lt;/h2&gt;
&lt;p&gt;ИИ-агенты невероятны в написании кода. Но доставка работающего full-stack приложения включает куда больше, чем генерация файлов. Нужно запустить сервисы в правильном порядке, управлять портами, установить переменные окружения, подключить базы данных и получить обратную связь, когда что-то ломается. Сейчас большинство агентов справляется со всем этим методом проб и ошибок — выполняя команды, читая вывод ошибок, пробуя снова.&lt;/p&gt;
&lt;p&gt;Мы нагружаем их Markdown-инструкциями, кастомными навыками и промптами, чтобы направить, но они непредсказуемы, не компилируются и стоят токенов даже для парсинга. Команда Aspire попала в точку с ключевым инсайтом: агентам нужны &lt;strong&gt;компиляторы и структурированные API&lt;/strong&gt;, а не больше Markdown.&lt;/p&gt;
&lt;h2 id="aspire-как-инфраструктура-для-агентов"&gt;Aspire как инфраструктура для агентов&lt;/h2&gt;
&lt;p&gt;Вот что Aspire 13.2 приносит для агентной разработки:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Весь ваш стек в типизированном коде.&lt;/strong&gt; AppHost определяет полную топологию — API, фронтенд, базу данных, кэш — в компилируемом TypeScript или 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;em&gt;скомпилировать для проверки&lt;/em&gt;. Компилятор сразу скажет, если что-то не так. Никаких догадок, никаких проб и ошибок с конфигами.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Одна команда, чтобы править ими всеми.&lt;/strong&gt; Вместо того чтобы агенты жонглировали &lt;code&gt;docker compose up&lt;/code&gt;, &lt;code&gt;npm run dev&lt;/code&gt; и скриптами запуска баз данных, всё сводится к &lt;code&gt;aspire start&lt;/code&gt;. Все ресурсы запускаются в правильном порядке, на правильных портах, с правильной конфигурацией. Долгоживущие процессы тоже не вешают агента — Aspire управляет ими.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Изолированный режим для параллельных агентов.&lt;/strong&gt; С &lt;code&gt;--isolated&lt;/code&gt; каждый запуск Aspire получает собственные случайные порты и отдельные пользовательские секреты. Несколько агентов работают в git worktrees? Они не столкнутся. Это огромное преимущество для инструментов вроде фоновых агентов VS Code, которые создают параллельные среды.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Глаза агента через телеметрию.&lt;/strong&gt; Вот где становится действительно мощно. Aspire CLI предоставляет полные данные OpenTelemetry во время разработки — трейсы, метрики, структурированные логи. Ваш агент не просто читает вывод консоли и надеется на лучшее. Он может отследить неудавшийся запрос через сервисы, профилировать медленные эндпоинты и точно определить, где что ломается. Это наблюдаемость продакшен-уровня в цикле разработки.&lt;/p&gt;
&lt;h2 id="аналогия-с-бамперами-на-боулинге"&gt;Аналогия с бамперами на боулинге&lt;/h2&gt;
&lt;p&gt;Команда Aspire использует отличную аналогию: думайте об Aspire как о бамперах на дорожке боулинга для ИИ-агентов. Если агент несовершенен (а он таким и будет), бамперы не дают ему закатывать шар в жёлоб. Определение стека предотвращает неправильную конфигурацию, компилятор ловит ошибки, CLI управляет процессами, а телеметрия обеспечивает обратную связь.&lt;/p&gt;
&lt;p&gt;Комбинируйте это с чем-то вроде Playwright CLI, и ваш агент может реально &lt;em&gt;использовать&lt;/em&gt; ваше приложение — кликать по флоу, проверять DOM, видеть поломки в телеметрии, исправлять код, перезапускать и тестировать снова. Построить, запустить, наблюдать, исправить. Это тот автономный цикл разработки, к которому мы стремились.&lt;/p&gt;
&lt;h2 id="начало-работы"&gt;Начало работы&lt;/h2&gt;
&lt;p&gt;Новичок в Aspire? Установите CLI с &lt;a href="https://get.aspire.dev"&gt;get.aspire.dev&lt;/a&gt; и следуйте &lt;a href="https://aspire.dev/get-started/first-app"&gt;руководству по началу работы&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Уже используете Aspire? Выполните &lt;code&gt;aspire update --self&lt;/code&gt; для получения 13.2, затем наведите ваш любимый кодирующий агент на репозиторий. Вы можете удивиться, насколько дальше он продвинется с ограничителями Aspire.&lt;/p&gt;
&lt;h2 id="подведём-итоги"&gt;Подведём итоги&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 — это уже не просто фреймворк для распределённых приложений — он становится необходимой инфраструктурой для агентов. Структурированные определения стека, запуск одной командой, изолированные параллельные запуски и телеметрия в реальном времени дают ИИ-агентам именно то, что нужно для перехода от написания кода к поставке приложений.&lt;/p&gt;
&lt;p&gt;Читайте &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;полный пост&lt;/a&gt; от команды Aspire со всеми деталями и демо-видео.&lt;/p&gt;</content:encoded></item><item><title>Изолированный режим Aspire устраняет кошмар конфликтов портов при параллельной разработке</title><link>https://thedotnetblog.com/ru/news/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/ru/news/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/</guid><description>Aspire 13.2 вводит режим --isolated: случайные порты, отдельные секреты и ноль коллизий при запуске нескольких экземпляров одного AppHost. Идеально для ИИ-агентов, worktrees и параллельных рабочих процессов.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Этот пост был переведён автоматически. Оригинал можно прочитать &lt;a href="https://thedotnetblog.com/ru/news/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/"&gt;здесь&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Если вы когда-нибудь пытались запустить два экземпляра одного проекта одновременно, вы знаете эту боль. Порт 8080 уже используется. Порт 17370 занят. Убить что-то, перезапустить, жонглировать переменными окружения — настоящий убийца продуктивности.&lt;/p&gt;
&lt;p&gt;Эта проблема не улучшается, а ухудшается. ИИ-агенты создают git worktrees для независимой работы. Фоновые агенты поднимают отдельные среды. Разработчики дважды клонируют один репозиторий для feature-веток. Каждый из этих сценариев упирается в одну и ту же стену: два экземпляра одного приложения борются за одни и те же порты.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 решает это одним флагом. James Newton-King из команды Aspire &lt;a href="https://devblogs.microsoft.com/aspire/aspire-isolated-mode-parallel-development/"&gt;описал все детали&lt;/a&gt;, и это одна из тех фич «почему у нас этого не было раньше».&lt;/p&gt;
&lt;h2 id="решение---isolated"&gt;Решение: &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;Вот и всё. Каждый запуск получает:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Случайные порты&lt;/strong&gt; — больше никаких коллизий между экземплярами&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Изолированные пользовательские секреты&lt;/strong&gt; — строки подключения и API-ключи остаются раздельными для каждого экземпляра&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Никакого ручного переназначения портов. Никакого жонглирования переменными окружения. Каждый запуск автоматически получает чистую среду без коллизий.&lt;/p&gt;
&lt;h2 id="реальные-сценарии-где-это-сияет"&gt;Реальные сценарии, где это сияет&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Множественные checkout.&lt;/strong&gt; У вас feature-ветка в одной директории и bugfix в другой:&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;Оба работают без конфликтов. Дашборд показывает, что где запущено.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Фоновые агенты в VS Code.&lt;/strong&gt; Когда фоновый агент Copilot Chat создаёт git worktree для независимой работы с вашим кодом, ему может понадобиться запустить ваш Aspire AppHost. Без &lt;code&gt;--isolated&lt;/code&gt; это конфликт портов с основным worktree. С ним оба экземпляра просто работают.&lt;/p&gt;
&lt;p&gt;Навык Aspire, поставляемый с &lt;code&gt;aspire agent init&lt;/code&gt;, автоматически инструктирует агентов использовать &lt;code&gt;--isolated&lt;/code&gt; при работе в worktrees. Так что фоновый агент Copilot должен справляться с этим из коробки.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Интеграционные тесты параллельно с разработкой.&lt;/strong&gt; Нужно запускать тесты против работающего AppHost, продолжая разрабатывать фичи? Изолированный режим даёт каждому контексту собственные порты и конфигурацию.&lt;/p&gt;
&lt;h2 id="как-это-работает-под-капотом"&gt;Как это работает под капотом&lt;/h2&gt;
&lt;p&gt;Когда вы передаёте &lt;code&gt;--isolated&lt;/code&gt;, CLI генерирует уникальный ID экземпляра для запуска. Это управляет двумя поведениями:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Рандомизация портов&lt;/strong&gt; — вместо привязки к предсказуемым портам, определённым в конфигурации AppHost, изолированный режим выбирает случайные доступные порты для всего — дашборда, эндпоинтов сервисов, всего. Service discovery автоматически подстраивается, чтобы сервисы находили друг друга независимо от назначенных портов.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Изоляция секретов&lt;/strong&gt; — каждый изолированный запуск получает собственное хранилище пользовательских секретов, привязанное к ID экземпляра. Строки подключения и API-ключи одного запуска не утекают в другой.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ваш код не нуждается в изменениях. Service discovery Aspire разрешает эндпоинты во время выполнения, так что всё подключается правильно независимо от назначения портов.&lt;/p&gt;
&lt;h2 id="когда-использовать"&gt;Когда использовать&lt;/h2&gt;
&lt;p&gt;Используйте &lt;code&gt;--isolated&lt;/code&gt; при запуске нескольких экземпляров одного AppHost одновременно — будь то параллельная разработка, автоматизированные тесты, ИИ-агенты или git worktrees. Для разработки с единственным экземпляром, где вы предпочитаете предсказуемые порты, обычный &lt;code&gt;aspire run&lt;/code&gt; по-прежнему отлично работает.&lt;/p&gt;
&lt;h2 id="подведём-итоги"&gt;Подведём итоги&lt;/h2&gt;
&lt;p&gt;Изолированный режим — это маленькая фича, которая решает реальную и всё более распространённую проблему. По мере того как разработка с ИИ подталкивает нас к большему количеству параллельных рабочих процессов — множество агентов, множество worktrees, множество контекстов — возможность просто поднять ещё один экземпляр без борьбы за порты становится необходимой.&lt;/p&gt;
&lt;p&gt;Прочитайте &lt;a href="https://devblogs.microsoft.com/aspire/aspire-isolated-mode-parallel-development/"&gt;полный пост&lt;/a&gt; для всех технических деталей и попробуйте с &lt;code&gt;aspire update --self&lt;/code&gt; для получения 13.2.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 получает CLI для документации — и ваш ИИ-агент тоже может им пользоваться</title><link>https://thedotnetblog.com/ru/news/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/ru/news/emiliano-montesdeoca/aspire-docs-cli-ai-skills/</guid><description>.NET Aspire 13.2 добавляет aspire docs — CLI для поиска, просмотра и чтения официальной документации, не покидая терминал. Он также работает как инструмент для ИИ-агентов. Вот почему это важно.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Этот пост был переведён автоматически. Оригинальную версию можно найти &lt;a href="https://thedotnetblog.com/ru/news/emiliano-montesdeoca/aspire-docs-cli-ai-skills/"&gt;здесь&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Знаете тот момент, когда вы погружены в Aspire AppHost, подключаете интеграции, и вам нужно проверить, какие именно параметры ожидает интеграция Redis? Вы переключаетесь Alt-Tab на браузер, ищете на aspire.dev, вглядываетесь в документацию API, возвращаетесь в редактор. Контекст потерян. Поток прерван.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 только что &lt;a href="https://devblogs.microsoft.com/aspire/aspire-docs-in-your-terminal/"&gt;выпустил решение этой проблемы&lt;/a&gt;. CLI &lt;code&gt;aspire docs&lt;/code&gt; позволяет искать, просматривать и читать официальную документацию Aspire прямо из терминала. А поскольку за ним стоят переиспользуемые сервисы, ИИ-агенты и навыки могут использовать те же самые команды для поиска документации вместо того, чтобы галлюцинировать несуществующие API.&lt;/p&gt;
&lt;h2 id="проблема-которую-это-действительно-решает"&gt;Проблема, которую это действительно решает&lt;/h2&gt;
&lt;p&gt;David Pine точно подмечает в оригинальном посте: ИИ-агенты были &lt;em&gt;ужасны&lt;/em&gt; в помощи разработчикам при создании приложений на Aspire. Они рекомендовали &lt;code&gt;dotnet run&lt;/code&gt; вместо &lt;code&gt;aspire run&lt;/code&gt;, ссылались на learn.microsoft.com для документации, которая живёт на aspire.dev, предлагали устаревшие NuGet-пакеты, и — моё любимое — галлюцинировали API, которых не существует.&lt;/p&gt;
&lt;p&gt;Почему? Потому что Aspire был специфичен для .NET гораздо дольше, чем является полиглотом, а LLM работают на тренировочных данных, которые предшествуют последним возможностям. Когда вы даёте ИИ-агенту возможность реально искать актуальную документацию, он перестаёт угадывать и начинает быть полезным.&lt;/p&gt;
&lt;h2 id="три-команды-ноль-вкладок-браузера"&gt;Три команды, ноль вкладок браузера&lt;/h2&gt;
&lt;p&gt;CLI освежающе прост:&lt;/p&gt;
&lt;h3 id="показать-всю-документацию"&gt;Показать всю документацию&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Возвращает каждую страницу документации, доступную на aspire.dev. Нужен машиночитаемый вывод? Добавьте &lt;code&gt;--format Json&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="поиск-по-теме"&gt;Поиск по теме&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs search &lt;span class="s2"&gt;&amp;#34;redis&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ищет и по заголовкам, и по содержимому с взвешенной оценкой релевантности. Тот же поисковый движок, который используется внутренне в инструментах документации. Вы получаете ранжированные результаты с заголовками, слагами и оценками релевантности.&lt;/p&gt;
&lt;h3 id="чтение-полной-страницы-или-только-одного-раздела"&gt;Чтение полной страницы (или только одного раздела)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs get redis-integration
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Выводит полную страницу в формате markdown в ваш терминал. Нужен только один раздел?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs get redis-integration --section &lt;span class="s2"&gt;&amp;#34;Add Redis resource&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Хирургическая точность. Никакого прокручивания 500 строк. Только нужная часть.&lt;/p&gt;
&lt;h2 id="аспект-ии-агентов"&gt;Аспект ИИ-агентов&lt;/h2&gt;
&lt;p&gt;Вот где становится интересно для нас, разработчиков, работающих с ИИ-инструментами. Те же команды &lt;code&gt;aspire docs&lt;/code&gt; работают как инструменты для ИИ-агентов — через навыки, MCP-серверы или простые CLI-обёртки.&lt;/p&gt;
&lt;p&gt;Вместо того чтобы ваш ИИ-ассистент придумывал API Aspire на основе устаревших тренировочных данных, он может вызвать &lt;code&gt;aspire docs search &amp;quot;postgres&amp;quot;&lt;/code&gt;, найти официальную документацию по интеграции, прочитать нужную страницу и дать вам документированный подход. Актуальная документация в реальном времени — а не то, что модель запомнила шесть месяцев назад.&lt;/p&gt;
&lt;p&gt;Архитектура за этим — намеренная. Команда Aspire создала переиспользуемые сервисы (&lt;code&gt;IDocsIndexService&lt;/code&gt;, &lt;code&gt;IDocsSearchService&lt;/code&gt;, &lt;code&gt;IDocsFetcher&lt;/code&gt;, &lt;code&gt;IDocsCache&lt;/code&gt;) вместо одноразовой интеграции. Это значит, что один и тот же поисковый движок работает для людей в терминале, ИИ-агентов в редакторе и автоматизации в CI-пайплайне.&lt;/p&gt;
&lt;h2 id="реальные-сценарии"&gt;Реальные сценарии&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Быстрые справки в терминале:&lt;/strong&gt; Вы на три файла в глубину и вам нужны параметры конфигурации Redis. Две команды, девяносто секунд, обратно к работе:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs search &lt;span class="s2"&gt;&amp;#34;redis&amp;#34;&lt;/span&gt; --limit &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs get redis-integration --section &lt;span class="s2"&gt;&amp;#34;Configuration&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Разработка с помощью ИИ:&lt;/strong&gt; Ваш навык VS Code оборачивает команды CLI. Вы спрашиваете «Добавь базу данных PostgreSQL в мой AppHost», и агент сначала смотрит реальную документацию, а потом отвечает. Никаких галлюцинаций.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Валидация CI/CD:&lt;/strong&gt; Ваш пайплайн программно проверяет конфигурации AppHost по официальной документации. Вывод &lt;code&gt;--format Json&lt;/code&gt; чисто передаётся в &lt;code&gt;jq&lt;/code&gt; и другие инструменты.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Пользовательские базы знаний:&lt;/strong&gt; Создаёте свои ИИ-инструменты? Направляйте структурированный JSON-вывод напрямую в свою базу знаний:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs search &lt;span class="s2"&gt;&amp;#34;monitoring&amp;#34;&lt;/span&gt; --format Json &lt;span class="p"&gt;|&lt;/span&gt; jq &lt;span class="s1"&gt;&amp;#39;[.[] | {slug, title, summary}]&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Никакого веб-скрейпинга. Никаких API-ключей. Те же структурированные данные, которые используются внутренне инструментами документации.&lt;/p&gt;
&lt;h2 id="документация-всегда-актуальна"&gt;Документация всегда актуальна&lt;/h2&gt;
&lt;p&gt;Это то, что я ценю больше всего. CLI не скачивает снимок — он обращается к aspire.dev с кэшированием на основе ETag. В момент обновления документации ваш CLI и любой навык, построенный на его основе, отражает это. Никаких устаревших копий, никаких моментов «но в вики было написано&amp;hellip;».&lt;/p&gt;
&lt;h2 id="подводя-итог"&gt;Подводя итог&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;aspire docs&lt;/code&gt; — это одна из тех маленьких функций, которая решает реальную проблему чисто и элегантно. Люди получают доступ к документации прямо в терминале. ИИ-агенты получают способ перестать угадывать и начать ссылаться на реальные документы. И всё это подкреплено одним и тем же источником истины.&lt;/p&gt;
&lt;p&gt;Если вы разрабатываете на .NET Aspire и ещё не попробовали CLI, запустите &lt;code&gt;aspire docs search &amp;quot;ваша-тема&amp;quot;&lt;/code&gt; и почувствуйте, как это работает. Затем подумайте о том, чтобы обернуть эти команды в свои ИИ-навыки или настройки автоматизации — ваши агенты скажут вам спасибо.&lt;/p&gt;
&lt;p&gt;Ознакомьтесь с &lt;a href="https://davidpine.dev/posts/aspire-docs-mcp-tools/"&gt;глубоким разбором David Pine&lt;/a&gt; о том, как создавались инструменты документации, и с &lt;a href="https://aspire.dev/reference/cli/commands/aspire-docs/"&gt;официальной справкой CLI&lt;/a&gt; для всех деталей.&lt;/p&gt;</content:encoded></item></channel></rss>