devdigest // dot net
3.9K subscribers
187 photos
4 videos
5 files
3.7K links
Главные новости из мира .NET

Все каналы проекта: https://xn--r1a.website/devdigestplatform/163
Download Telegram
⚡️ Rider стартовал 44 секунды из-за Defender — Microsoft починила это в самом Defender

JetBrains разобрала, почему Rider и ReSharper медленно стартуют на Windows. Виновник — Microsoft Defender: первый запуск Rider из Toolbox сканировался 44 секунды, Visual Studio и VS Code — меньше секунды.

Причина в расположении, а не в коде. Процессы из защищённых от записи путей получают более широкие правила доверия, и Defender почти не трогает их при старте. Toolbox и ReSharper out-of-process ставятся в пользовательскую папку, поэтому после переезда на OOP-архитектуру процесс ReSharper стал получать полный скан. Диагностировали по ETW-событиям Microsoft-Antimalware-Engine и CPU time, по 10 замеров на инструмент. Итог: JetBrains IDE — 10–40 секунд, CLI-инструменты — меньше 2. Microsoft выпустила Defender 1.449.454.0 с оптимизированным сканированием приложений из write-protected папок — Rider и ReSharper OOP теперь укладываются в 5 секунд. ReSharper 2026.2.1 идёт с OOP по умолчанию.

Если IDE всё ещё тормозит: обновить Defender, вынести репозитории и кэши на Dev Drive, в крайнем случае — исключения через Add-MpPreference. Я бы начал с Dev Drive.

👉🏻 Канал | 💬 Чат | 📕 Каталог
👍4🎉3❤2
⚡️ Сентябрьский servicing .NET: закрыто 8 CVE в 10.0, 9.0 и 8.0

Microsoft выпустила сентябрьский servicing-релиз .NET от 8 сентября: версии 10.0.12, 9.0.20 и 8.0.31, закрыто восемь CVE.

Все восемь уязвимостей затрагивают .NET 10, 9 и 8 одновременно: CVE-2026-69805, 69439, 71328, 69522, 69304, 58649, 66822 и 69806. Одна из них, CVE-2026-69522, задевает ещё и .NET Framework от 4.6.2 до 4.8.1, то есть обновлять придётся и legacy-хосты. Исправления разложены по отдельным changelog для ASP.NET Core, EF Core и runtime; контейнерные образы и Linux-пакеты обновлены вместе с инсталляторами.

Это тот тип обновления, который откладывать нельзя: патч-версии внутри одного major не ломают совместимость, а восемь CVE в трёх поддерживаемых линиях означают, что уязвимы почти все прод-окружения.

👉🏻 Канал | 💬 Чат | 📕 Каталог
👍5❤1
⚡️ Rider 2026.3 EAP: радужные скобки и не только

JetBrains открыла Early Access Program для Rider 2026.3.

Парные скобки теперь легче различать цветам и уровню вложенности. По умолчанию фича выключена, включается в Settings, Editor, General, Appearance.

Data breakpoints теперь ставятся правым кликом по переменной прямо в редакторе, а не только через окно Watches, и добавляются из окна Breakpoints по имени переменной или адресу памяти с размером региона. Поддержаны чтение и запись, условия, логирование и валидация ввода: это в первую очередь про Unreal Engine и собственные движки на C++.

В popup автодополнения появился ряд фильтров по видам подсказок, левый клик по иконке оставляет только namespace, классы, enum или события, правый прячет их; фильтры перенесены из ReSharper.

Мелочи, которые тоже пригодятся: плагины для геймдева собраны в отдельную категорию Game Development, а dotCover научился считать покрытие для тестов на TUnit, нужен пакет JetBrains.dotCover.Framework и Microsoft.Testing.Platform не ниже 2.3.0.

👉🏻 Канал | 💬 Чат | 📕 Каталог
❤4👍2
⚡️ Uno Platform разделили MCP-сервер на два — по времени жизни данных, а не по фичам

Uno Platform построили для AI-агентов два MCP-сервера вместо одного и объясняют, почему разделение оказалось дешевле по токенам, чем один сервер на все случаи.

Docs-сервер (HTTP, stateless, mcp.platform.uno/v1) даёт агенту документацию и правила API — это знание, которое меняется только с релизами, и правки в документации сразу видны во всех активных сессиях. App-сервер — локальный stdio-инструмент с состоянием: запускает приложение с Hot Reload, «видит» через скриншоты и XML визуального дерева (это находит не только «что сломано», но и какой конкретно элемент и его свойства), кликает и печатает через automation peers, отдаёт статус здоровья. Стек: MCP C# SDK, Roslyn workspace для компиляции в браузере, Microsoft Agent Framework для планирования, SkiaSharp. По токенам разница ощутимая: docs-сервер стоит агенту ~6.4k токенов контекста, app-сервер — ~1.5k, тогда как один встроенный MCP-сервер GitHub обходится в ~5.2k — то есть деление по времени жизни данных (что меняется на деплое vs что меняется во время выполнения) оказалось не только архитектурно чище, но и дешевле.

Принцип «разделяй MCP-серверы по lifetime, а не по фичам» универсален и не завязан на UI-фреймворки — если пишете свой MCP-сервер, посчитайте, сколько токенов съедают только описания инструментов, до того как агент сделает хоть что-то полезное.

👉🏻 Канал | 💬 Чат | 📕 Каталог
👍3🎉1
⚡️ F# обходит C# почти по всем параметрам, кроме тулинга — колонка Mark Seemann

Марк Симанн (автор блога ploeh про DDD и функциональный C#) в новой колонке заявляет, что F# превосходит C# «по большинству осей сравнения» — несмотря на то, что C# популярнее.

Главный аргумент архитектурный – F# по умолчанию запрещает циклические зависимости между модулями, и Симанн называет это killer feature — язык сам не даёт собрать спагетти-код вместо того, чтобы полагаться на дисциплину разработчика при декомпозиции. К этому добавляются computation expressions, сильный вывод типов и коллекции со structural equality из коробки. За C# он оставляет лучшую поддержку в IDE, совместимость с ASP.NET Razor и более зрелые инструменты для cyclomatic complexity и mutation testing.

Вывод автора весьма провокационный: F# — лучший выбор, если не мешает доступность разработчиков на рынке.

👉🏻 Канал | 💬 Чат | 📕 Каталог
❤5🎉1
⚡️ Environment.ProcessorCount с .NET 6 считает лимит процесса, а не ядра хоста

Andrew Lock показал, что начиная с .NET 6 Environment.ProcessorCount отдаёт не число процессоров хоста, а количество логических ядер, доступных именно процессу — в контейнере с CPU-лимитом это совсем другое число.

Обхода в BCL нет, поэтому для каждой платформы — свой P/Invoke. В Windows это GetActiveProcessorCount с флагом «все группы процессоров» (0xFFFF), в macOS — sysctlbyname("hw.logicalcpu"), а в Linux приходится парсить /sys/devices/system/cpu/online, где диапазоны ядер вперемешку с одиночными номерами вроде «0-3,4,8-11». Lock приводит парсер для обоих форматов и советует завернуть результат в синглтон: значение не меняется за время жизни процесса, дёргать sysctl или P/Invoke на каждую проверку незачем.

Сам автор честно пишет, что в проде это ещё не проверял. Если вам действительно нужно число ядер хоста, а не лимит контейнера — например, для пула потоков вне cgroup-ограничений — сначала прогоните код на своей платформе, а не копируйте вслепую.

👉🏻 Канал | 💬 Чат | 📕 Каталог
❤8
⚡️ Rider и ReSharper 2026.2.2: виджет для настройки AI-агентов и точечные подсказки хуков

В Rider и ReSharper вышел патч 2026.2.2 — и половина изменений про AI-агентов.

Новый виджет в статус-баре показывает, какие agent-фичи вообще есть в IDE — MCP tools, skills, hooks — и что из этого уже включено, а что можно настроить в один клик. До этого искать это приходилось по настройкам.

Хуки стали точнее: инспекция теперь возвращает результаты только по добавленному агентом коду, а не по всему файлу, а reformat-хук отдаёт diff именно тех изменений форматирования, которые внёс IDE — агенту не нужно гадать, что поменялось. dotCover в Rider и ReSharper научился считать покрытие для тестов на TUnit (нужен пакет JetBrains.dotCover.Framework и Microsoft.Testing.Platform 2.3.0+).

👉🏻 Канал | 💬 Чат | 📕 Каталог
❤2
⚡️ Microsoft показывает, как собрать AI-агента на C# с нуля — в живой серии из четырёх сессий

Microsoft Agent Framework — это не сам агент, а harness: рантайм-слой, который берёт на себя оркестрацию вокруг модели. Ты даёшь модель, промпт и доменные тулы — harness добавляет память, планирование и retry.

В новой серии «From Model to Agent» на .NET YouTube это собирают вживую на C#, сессия за сессией: от chatClient.AsHarnessAgent(...) с автоматическим вызовом функций и историей — до продакшен-версии с approval-политиками на рискованные действия (ApprovalRequiredAIFunction), доступом к файлам только в разрешённых директориях, shell-командами с таймаутами и OpenTelemetry-трейсингом вызовов тулов и токенов. Готовый код — в репозитории MafClaw, две сессии из четырёх уже вышли.

Это тот же Agent Framework, что и в Python-версии — если у вас в проекте C#-бэкенд и ML-агенты на Python одновременно, концепции 1-в-1 переносятся между стеками.

👉🏻 Канал | 💬 Чат | 📕 Каталог
👍8❤4
⚡️ AG-UI Protocol получил официальный .NET SDK на Microsoft.Extensions.AI

Microsoft выпустил официальный .NET SDK для AG-UI (Agent-User Interaction Protocol) — открытого протокола, который стандартизирует, как агент стримит события в UI: RUN_STARTED, TEXT_MESSAGE_CONTENT, STATE_DELTA и так далее, вместо того чтобы каждый фреймворк придумывал свой формат стриминга.

SDK — это пять NuGet-пакетов: AGUI.Abstractions (типы протокола), AGUI.Formatting (форматы), AGUI.Protobuf (опциональный бинарный кодек), AGUI.Client и AGUI.Server. В основе — знакомый IChatClient из Microsoft.Extensions.AI: метод AsAGUIEventStreamAsync() сам превращает стриминг ответа в события протокола с нужными лайфсайкл-маркерами, а AGUIChatClient на другой стороне позволяет дёргать чужого AG-UI-агента как обычный IChatClient. Microsoft Agent Framework теперь тоже переехал на этот пакет вместо своей реализации.

Главное — протокол один и тот же в C#, TypeScript и Python SDK: .NET-бэкенд агента спокойно обслуживает фронтенд на любом из них. Если у вас агенты частично на C#, частично на Python (см. на этой неделе //data science) — это буквально общий язык между ними, а не два похожих, но разных формата.

👉🏻 Канал | 💬 Чат | 📕 Каталог
👍2
⚡️ F# Weekly #40

Вышел 40-й выпуск F# Weekly Сергея Тихона — еженедельной подборки всего, что происходит в F# и вокруг .NET.

Самое интересное в нём — экспериментальные Blazor AI-компоненты из .NET 11 RC1.

Чат с AI-агентом теперь собирается одним компонентом ChatPage: стриминг ответа, вызовы инструментов и кнопки approve/reject для рискованных действий уже внутри.

Остальное — новые проекты, релизы библиотек и видео недели — в самом выпуске.

👉🏻 Канал | 💬 Чат | 📕 Каталог
❤4👍1
⚡️ Марк Симанн: LLM ускоряют написание кода, но не скорость обучения разработчика

Марк Симанн отвечает на вопрос читателя: стоит ли ещё учить основы программирования, если LLM пишет код за тебя. Его тезис — LLM ускоряют написание кода, но не скорость, с которой человеческий мозг усваивает новые концепции; это и есть настоящее узкое место, а не доступ к учебникам или ментору.

Себя он в пример не ставит: C# выучил по документации и примерам кода, почти не осиливая профильные книги, а вот F# и Haskell без книг не зашли. Путь к тому, чтобы «уверенность прошлого себя» начала казаться поверхностной, занял у него десятилетия — и главный вопрос статьи в том, есть ли у тех, кто учится сейчас, время на такую же глубину, или его больше не будет.

Практический совет: не задавай LLM неверифицируемые вопросы вроде «что мне учить дальше» — только фальсифицируемые, на которые есть проверяемый ответ (код работает или нет). Тем, кто входит в профессию с нуля именно сейчас, он всерьёз предлагает присмотреться к столярному делу или металлообработке — как более устойчивым к автоматизации.

👉🏻 Канал | 💬 Чат | 📕 Каталог
❤2
⚡️ IfItQuacks: duck typing в C# через interceptors, без dynamic и рефлексии

IfItQuacks выросла из proof-of-concept в полноценную библиотеку: помечаешь метод атрибутом [DuckTyped], и source generator на этапе компиляции проверяет, что переданные аргументы структурно подходят под нужный интерфейс — без dynamic, без рефлексии, через сгенерированные адаптеры.

Пример из документации: интерфейс INamed с одним Name, метод Greet(INamed first, INamed second) — и в него спокойно передаются Person и Mallard, даже если ни один из них INamed не реализует. Во второй части добавили то, чего не хватало для реального использования: события, индексаторы, делегаты, static abstract члены, сохранение identity через Equals/GetHashCode с возможностью развернуть обёртку обратно в оригинальный тип. Отдельно полезная штука для тестов — «мгновенные стабы» из анонимных типов вместо ручных моков.

Ставится без правки csproj. Репозиторий и документация — у linkdotnet на GitHub.

👉🏻 Канал | 💬 Чат | 📕 Каталог
🎉4
⚡️ DBSC добрался до ASP.NET Core: экспериментальная защита cookie в .NET 11 preview 8

В .NET 11 preview 8 появилась экспериментальная поддержка Device Bound Session Credentials — протокола, который закрывает классическую дыру: украл долгоживущую auth-cookie с машины жертвы — можешь пользоваться ей с любой другой машины. DBSC меняет схему на короткоживущие credentials плюс refresh, который сервер обязан проверить на той же машине, что выдавала исходный токен — подпись делает приватный ключ, который никогда не покидает TPM.

Подключается это одним вызовом: AddDeviceBoundSession(sourceScheme: IdentityConstants.ApplicationScheme) на AuthenticationBuilder после dotnet add package Microsoft.AspNetCore.Authentication.DeviceBoundSessions --prerelease. Больше конфигурации на старте не требуется.

Ограничения серьёзные: работает только по HTTPS, зависит от поддержки браузером (пока только Chromium-based), и — неожиданно — ломается при включённых блокировщиках рекламы. Запросы регистрации и обновления не видны в обычных devtools, так что дебажить это будет отдельным квестом. И главное: пакет останется в preview даже после релиза .NET 11 — в проде пока рано.

👉🏻 Канал | 💬 Чат | 📕 Каталог
⚡️ У NuGet-пакетов Microsoft с 23 сентября новый сертификат подписи

С 23 сентября Microsoft подписывает NuGet-пакеты новым author-signing сертификатом. Если у вас настроен dotnet nuget verify или NuGet-клиент с trusted signers, которые проверяют конкретный отпечаток сертификата Microsoft, — на первом же пакете с новой подписью получите NU3034: установка упадёт, потому что старый сертификат в списке доверенных, а нового там нет.

Чинится это одной командой dotnet nuget trust (или руками через nuget.config) — новый отпечаток добавляется, старый лучше не убирать сразу: часть уже опубликованных пакетов ещё какое-то время будет подписана старым.

Если в CI где-то жёстко прибит trusted signer по конкретному thumbprint — самое время это найти до того, как оно упадёт само.

У кого в пайплайне уже стоит trusted signer на Microsoft-пакеты — успели обновить, или ждёте первого красного билда?

👉🏻 Канал | 💬 Чат | 📕 Каталог
❤2👍2
⚡️ Вышел NBomber 6.7.0

Инструмент нагрузочного тестирования для .NET NBomber обновился до версии 6.7.0. Главное: переработанный HTML-отчёт со сводкой по тестовому прогону, вкладками Summary/Charts/Thresholds и подробной таблицей порогов.

Писать сценарии стало проще, появился отдельный профиль нагрузки для прогрева перед основным тестом, а также теги для сессий и сценариев. Интеграции с InfluxDB, Datadog, OpenTelemetry и другими системами передают больше метрик, а в кластерном режиме исправлена ошибка, из-за которой узлы могли зависать при сбоях.

👉🏻 Канал | 💬 Чат | 📕 Каталог
❤5👍2🎉1
⚡️ F# Weekly #42, 2026

Вышел свежий выпуск дайджеста F# Weekly. Главная новость — F# 11 в составе .NET 11 Release Candidate 2, а вместе с ним улучшения производительности компилятора: F# 11 заметно экономнее расходует память.

Из новостей Microsoft — анонс dotnetup, нового менеджера инструментария .NET, и выход .NET 11 RC 2. Среди заметных проектов недели — MVUish.Avalonia, лёгкая MVU-библиотека для Avalonia, F#-обёртка SpectreTuff над Spectre.Console, REPL SageFs с горячей перезагрузкой и живым тестированием, а также fsharp-skills — набор инструкций для ИИ-агентов, работающих с кодом на F#.

Также в выпуске: Fable 5.22, FsUnit 8.0, Expecto 11.1.1, Farmer 1.9.33 и других библиотек.

👉🏻 Канал | 💬 Чат | 📕 Каталог
❤4👍1🎉1
⚡️ C# Dev Kit 11 переписали: загрузка стала быстрее более чем в двадцать раз

Microsoft пересобрала C# Dev Kit для VS Code: шесть managed-процессов свели в один CSDevKit, скомпилированный Native AOT. Версия прыгнула с 3.3 сразу на 11.0 — теперь номер совпадает с релизом .NET.

Цифры из замеров Microsoft. Aspire (407 проектов): активный файл готов за 0.47 с вместо 84.1 с, всё решение — за 3.0 с; сборка без изменений 34.4 с → 0.88 с, после правки одного файла 36.1 с → 2.1 с. Orleans (155 проектов): решение 50.3 с → 2.3 с. Память серверного процесса: Aspire 2072 МБ → 316 МБ, Roslyn 2000 → 379 МБ. Roslyn language service по-прежнему живёт в отдельном процессе и почти не менялся. Кэши проектов строятся при первой загрузке — Microsoft предлагает коммитить их в репозиторий, чтобы свежие клоны и worktree получали быстрый тулинг сразу.

👉🏻 Канал | 💬 Чат | 📕 Каталог
❤10👍6
⚡️ .NET 11 RC2 вышел с go-live лицензией — GA обещан в ноябре

.NET 11 Release Candidate 2 доступен с go-live лицензией: его можно ставить в прод с поддержкой Microsoft. Финальный релиз — в ноябре, точной даты нет. Работает в Visual Studio 2026 Insiders и VS Code с C# Dev Kit.

Что добавили. В библиотеках — CborReader читает данные по частям, экспериментальные CompositeMLKem (классический и постквантовый KEM вместе дают общий секрет) и Hpke API, EnvelopedCms шифрует через ML-KEM (пока чистый ML-KEM и не на Windows). У SocketsHttpHandler появился InitialHttp2MaxConcurrentStreams — число параллельных стримов на новом HTTP/2-соединении до прихода SETTINGS от сервера. В SDK — быстрый wildcard-матчинг в MSBuild: по замерам Microsoft полная оценка проекта на 10–13% быстрее, аллокаций меньше на 16–34%. В NuGet — опция --min-publish-age-hours для источников: пакеты моложе N часов не берутся, а если подходящей версии не осталось, restore падает с NU1020 — простая защита от свежезалитого вредоносного пакета. В F# — runtime async и reraise внутри computation expressions. В MAUI — шаблон --ui csharp, где Shell и страницы описаны на C# без XAML. В ASP.NET Core виртуализация QuickGrid (AnchorMode, ItemComparer) вышла из experimental.

Если вы ещё на .NET 8 — самое время прогнать тесты на RC2: до GA остался один цикл, и ломать API уже не будут.

👉🏻 Канал | 💬 Чат | 📕 Каталог
❤1👍1
Forwarded from devdigest // azure
⚡️ AWS выпустила инструмент для автоматического переноса .NET-приложений с Azure на AWS

Amazon сделала общедоступной новую функцию AWS Transform, которая сама переписывает .NET-приложения, написанные под Azure, на сервисы AWS.

Агент модернизации находит в коде вызовы Azure SDK и заменяет их на эквиваленты из AWS SDK: Azure Functions превращаются в AWS Lambda, Blob Storage в Amazon S3, Queue Storage в Amazon SQS, а Cosmos DB в DynamoDB (пока в превью). Перед запуском разработчик видит отчёт с найденными зависимостями и планом замены и может поправить его вручную.

Функция уже работает в восьми регионах AWS, включая Франкфурт и Лондон.

👉🏻 Канал | 💬 Чат | 📕 Каталог
👍1
⚡️ Одна подмена в ILLink.Substitutions.xml выкинула Azure.Identity из NativeAOT-бинарника: минус 25%

Andrew Lock обновил Microsoft.Diagnostics.Runtime (ClrMD) с 3.2 до 4.1 — и NativeAOT-бинарник потолстел на 437 КБ (+12.4% для win-x64). Виновник нашёлся через Sizoscope: тип InteractiveBrowserCredential тянул за собой Azure.Identity, Microsoft.Identity.Client, MSAL Extensions и System.Text.Json.

Почему линкер их не вырезал: свойство IsSymweb сравнивает host у Uri в рантайме, и доказать статически, что конструктор недостижим, невозможно. Решение — ILLink.Substitutions.xml, где тело get_IsSymweb() подменяется на stub с value false. Нюанс: как EmbeddedResource для NativeAOT это не работает — таргеты ILCompiler не подхватывают ILLinkSubstitutionsXmls при PublishAot, пришлось передавать через IlcArg --substitution. Результат: win-x64 3.956 → 2.949 МБ, linux-x64 4.459 → 3.466 МБ, минус 22–25%.

Две оговорки от автора. Подмена безопасна только потому, что в его коде ветка с Symweb никогда не срабатывает — это не универсальный рецепт. И если искать кандидатов на trimming с помощью LLM, каждое её утверждение надо перепроверять: оказалось, что бóльшая часть выигрыша относительно старой сборки пришла от перехода с .NET 8 на .NET 10, а не от подмен.

👉🏻 Канал | 💬 Чат | 📕 Каталог
❤1