This week in .NET 02.10.2026
ArtemНовости
Rider 2026.2.3 Is Released!
В Rider 2026.2.3 появилась новая штука для поиска проблем с производительностью. Теперь прямо из окна Monitoring можно отправить свежий snapshot на разбор AI Assistant. Он подключит dotTrace, посмотрит, где приложение тратит больше всего времени, и попробует подсветить узкие места.
Пока функция работает только на Windows. Также понадобится подписка dotUltimate или All Products Pack вместе с AI Assistant.
Aspire 13.6: Your dashboard gets memory
В Aspire 13.6 Dashboard научился сохранять данные между запусками. Раньше после остановки AppHost логи, трейсы и состояние ресурсов пропадали. Теперь к ним можно вернуться и после перезапуска приложения. Заодно в Dashboard добавили возможность открыть shell внутри контейнера, а в Aspire появилась официальная поддержка хостинга Java и Rust приложений.
Статьи
Build Agentic UI with the new Blazor AI components
Microsoft представила экспериментальные Blazor-компоненты для Agentic UI. Идея в том, чтобы не ограничиваться обычным чатиком с LLM: компоненты умеют отображать streaming-ответы, вызовы tools, процесс выполнения задач, approval'ы и shared state между приложением и агентом. Всё это можно комбинировать с Microsoft.Extensions.AI, Agent Framework, AG-UI и Aspire. Для экспериментов понадобится .NET 11 RC1.
C# 15 Collection Expression Arguments: What's New vs C# 12 and 13
В C# 15 collection expressions получили новый синтаксис with(...), который позволяет передавать параметры создания коллекции прямо внутри [...]. Например, можно сразу задать capacity или передать comparer в собственный collection builder. Автор на примерах показывает отличие от C# 12/13 и разбирает ограничения — например, для массивов и Span такой синтаксис не работает.
Интересное
Поменяли object на Lock, и два потока встретились в критической секции
Интересный разбор одной неочевидной особенности System.Threading.Lock.
Оказывается, просто заменить object на Lock бывает недостаточно: компилятор выбирает механизм синхронизации по статическому типу выражения. Если переменная имеет тип Lock, то используется новый механизм. Если тот же объект привести к object, то код уже будет работать через старый Monitor.
В итоге два участка программы могут синхронизироваться на одном и том же объекте, но при этом одновременно оказаться внутри критической секции.
В статье есть небольшой воспроизводимый пример, объяснение предупреждения CS9216 и сравнение расхода памяти.
My coding agent wrote outside the repo. Nothing stopped it.
Статья о том, как ограничивать доступ coding agents к файловой системе.
Если просто написать в системном промпте что-то вроде "не выходи за пределы репозитория", реальной защитой это не станет. Когда инструмент принимает произвольный путь, агент технически все равно может записать файл в другое место.
Автор предлагает решать проблему на уровне архитектуры: использовать виртуальную файловую систему с заранее разрешенными mount point'ами, а прямую работу с System.IO запрещать через Roslyn analyzer.
Материал завязан на конкретную реализацию, но сама идея довольно универсальная: ограничения для агента лучше задавать кодом и правами доступа, а не надеяться на текст инструкции.