⚡️ 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.
👉🏻 Канал | 💬 Чат | 📕 Каталог
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.
👉🏻 Канал | 💬 Чат | 📕 Каталог
The JetBrains Blog
Why Rider and ReSharper Were Slow to Start, and How Microsoft Helped Fix the Problem - The JetBrains Blog
Find out how we teamed up with Microsoft to optimize startup times of ReSharper and JetBrains Rider with Microsoft Defender for Windows Developers.
👍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 в трёх поддерживаемых линиях означают, что уязвимы почти все прод-окружения.
👉🏻 Канал | 💬 Чат | 📕 Каталог
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.
👉🏻 Канал | 💬 Чат | 📕 Каталог
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.
👉🏻 Канал | 💬 Чат | 📕 Каталог
The JetBrains Blog
The Rider 2026.3 Early Access Program Is Open - The JetBrains Blog
The first Early Access build for Rider 2026.3 is now available! It includes rainbow brackets, an easier way to set data breakpoints, a new Game Development plugin category, and filters in code complet
❤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-сервер, посчитайте, сколько токенов съедают только описания инструментов, до того как агент сделает хоть что-то полезное.
👉🏻 Канал | 💬 Чат | 📕 Каталог
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# — лучший выбор, если не мешает доступность разработчиков на рынке.
👉🏻 Канал | 💬 Чат | 📕 Каталог
Марк Симанн (автор блога ploeh про DDD и функциональный C#) в новой колонке заявляет, что F# превосходит C# «по большинству осей сравнения» — несмотря на то, что C# популярнее.
Главный аргумент архитектурный – F# по умолчанию запрещает циклические зависимости между модулями, и Симанн называет это killer feature — язык сам не даёт собрать спагетти-код вместо того, чтобы полагаться на дисциплину разработчика при декомпозиции. К этому добавляются computation expressions, сильный вывод типов и коллекции со structural equality из коробки. За C# он оставляет лучшую поддержку в IDE, совместимость с ASP.NET Razor и более зрелые инструменты для cyclomatic complexity и mutation testing.
Вывод автора весьма провокационный: F# — лучший выбор, если не мешает доступность разработчиков на рынке.
👉🏻 Канал | 💬 Чат | 📕 Каталог
ploeh blog
Worse is better: C# versus F#
C# is a great programming language, but F# is better.
❤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-ограничений — сначала прогоните код на своей платформе, а не копируйте вслепую.
👉🏻 Канал | 💬 Чат | 📕 Каталог
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-ограничений — сначала прогоните код на своей платформе, а не копируйте вслепую.
👉🏻 Канал | 💬 Чат | 📕 Каталог
Andrew Lock | .NET Escapades
Finding the total number of processors on a machine with .NET
In this post I show how to find the total number of logical CPUs on a host (not just those available to a process); something that isn't exposed in modern .NET
❤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+).
👉🏻 Канал | 💬 Чат | 📕 Каталог
В 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+).
👉🏻 Канал | 💬 Чат | 📕 Каталог
The JetBrains Blog
Rider and ReSharper 2026.2.2 Are Out! - The JetBrains Blog
We’ve released version 2026.2.2 of ReSharper, Rider, and .NET tools. You can install this update from inside the tools themselves, through the Toolbox App, or on our website. Here’s what’s new in t
❤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 переносятся между стеками.
👉🏻 Канал | 💬 Чат | 📕 Каталог
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) — это буквально общий язык между ними, а не два похожих, но разных формата.
👉🏻 Канал | 💬 Чат | 📕 Каталог
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 для рискованных действий уже внутри.
Остальное — новые проекты, релизы библиотек и видео недели — в самом выпуске.
👉🏻 Канал | 💬 Чат | 📕 Каталог
Вышел 40-й выпуск F# Weekly Сергея Тихона — еженедельной подборки всего, что происходит в F# и вокруг .NET.
Самое интересное в нём — экспериментальные Blazor AI-компоненты из .NET 11 RC1.
Чат с AI-агентом теперь собирается одним компонентом ChatPage: стриминг ответа, вызовы инструментов и кнопки approve/reject для рискованных действий уже внутри.
Остальное — новые проекты, релизы библиотек и видео недели — в самом выпуске.
👉🏻 Канал | 💬 Чат | 📕 Каталог
Sergey Tihon's Blog
F# Weekly #40, 2026 – Agentic .NET UI and FSharp.CloudEdge
Welcome to F# Weekly, A roundup of F# content from this past week: Microsoft New Build Agentic UI with the new Blazor AI components Aspire 13.6: Your dashboard gets memory | Aspire Blog Bringing ri…
❤4👍1
⚡️ Марк Симанн: LLM ускоряют написание кода, но не скорость обучения разработчика
Марк Симанн отвечает на вопрос читателя: стоит ли ещё учить основы программирования, если LLM пишет код за тебя. Его тезис — LLM ускоряют написание кода, но не скорость, с которой человеческий мозг усваивает новые концепции; это и есть настоящее узкое место, а не доступ к учебникам или ментору.
Себя он в пример не ставит: C# выучил по документации и примерам кода, почти не осиливая профильные книги, а вот F# и Haskell без книг не зашли. Путь к тому, чтобы «уверенность прошлого себя» начала казаться поверхностной, занял у него десятилетия — и главный вопрос статьи в том, есть ли у тех, кто учится сейчас, время на такую же глубину, или его больше не будет.
Практический совет: не задавай LLM неверифицируемые вопросы вроде «что мне учить дальше» — только фальсифицируемые, на которые есть проверяемый ответ (код работает или нет). Тем, кто входит в профессию с нуля именно сейчас, он всерьёз предлагает присмотреться к столярному делу или металлообработке — как более устойчивым к автоматизации.
👉🏻 Канал | 💬 Чат | 📕 Каталог
Марк Симанн отвечает на вопрос читателя: стоит ли ещё учить основы программирования, если LLM пишет код за тебя. Его тезис — LLM ускоряют написание кода, но не скорость, с которой человеческий мозг усваивает новые концепции; это и есть настоящее узкое место, а не доступ к учебникам или ментору.
Себя он в пример не ставит: C# выучил по документации и примерам кода, почти не осиливая профильные книги, а вот F# и Haskell без книг не зашли. Путь к тому, чтобы «уверенность прошлого себя» начала казаться поверхностной, занял у него десятилетия — и главный вопрос статьи в том, есть ли у тех, кто учится сейчас, время на такую же глубину, или его больше не будет.
Практический совет: не задавай LLM неверифицируемые вопросы вроде «что мне учить дальше» — только фальсифицируемые, на которые есть проверяемый ответ (код работает или нет). Тем, кто входит в профессию с нуля именно сейчас, он всерьёз предлагает присмотреться к столярному делу или металлообработке — как более устойчивым к автоматизации.
👉🏻 Канал | 💬 Чат | 📕 Каталог
ploeh blog
On learning programming in an age of LLMs
Open answers to a reader's letter.
❤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.
👉🏻 Канал | 💬 Чат | 📕 Каталог
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.
👉🏻 Канал | 💬 Чат | 📕 Каталог
Steven Giesel
If It Quacks - Part 2
Some days ago I wrote about duck-typing in C# with interceptors. Back then it was a proof-of-concept with a lot of rough edges. Now it is a real library: IfItQuacks.
🎉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 — в проде пока рано.
👉🏻 Канал | 💬 Чат | 📕 Каталог
В .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 — в проде пока рано.
👉🏻 Канал | 💬 Чат | 📕 Каталог
Andrew Lock | .NET Escapades
Experimental support for Device Bound Session Credentials (DBSC) in ASP.NET Core
In this post I look at the new experimental support for DBSC provided by the Microsoft.AspNetCore.Authentication.DeviceBoundSessions package
⚡️ У 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-пакеты — успели обновить, или ждёте первого красного билда?
👉🏻 Канал | 💬 Чат | 📕 Каталог
С 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 и другими системами передают больше метрик, а в кластерном режиме исправлена ошибка, из-за которой узлы могли зависать при сбоях.
👉🏻 Канал | 💬 Чат | 📕 Каталог
Инструмент нагрузочного тестирования для .NET NBomber обновился до версии 6.7.0. Главное: переработанный HTML-отчёт со сводкой по тестовому прогону, вкладками Summary/Charts/Thresholds и подробной таблицей порогов.
Писать сценарии стало проще, появился отдельный профиль нагрузки для прогрева перед основным тестом, а также теги для сессий и сценариев. Интеграции с InfluxDB, Datadog, OpenTelemetry и другими системами передают больше метрик, а в кластерном режиме исправлена ошибка, из-за которой узлы могли зависать при сбоях.
👉🏻 Канал | 💬 Чат | 📕 Каталог
Nbomber
NBomber 6.7.0 | NBomber
NBomber 6.7.0 is here! This release introduces several improvements to scenario creation, warm-up configuration, test run metadata, and reporting. We’ve also fixed several issues in NBomber Cluster that could cause nodes to wait indefinitely under certain…
❤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 и других библиотек.
👉🏻 Канал | 💬 Чат | 📕 Каталог
Вышел свежий выпуск дайджеста 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 и других библиотек.
👉🏻 Канал | 💬 Чат | 📕 Каталог
Sergey Tihon's Blog
F# Weekly #42, 2026 – F# 11 RC2 & compiler performance improvements
Welcome to F# Weekly, A roundup of F# content from this past week: News F# in .NET 11 RC 2 – Release Notes Performance improvements in the F# 11 compiler Microsoft News Introducing dotnetup: …
❤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 получали быстрый тулинг сразу.
👉🏻 Канал | 💬 Чат | 📕 Каталог
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 уже не будут.
👉🏻 Канал | 💬 Чат | 📕 Каталог
.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, включая Франкфурт и Лондон.
👉🏻 Канал | 💬 Чат | 📕 Каталог
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, включая Франкфурт и Лондон.
👉🏻 Канал | 💬 Чат | 📕 Каталог
Amazon
AWS Transform announces Azure-to-AWS cloud-native code conversion - AWS
Discover more about what's new at AWS with AWS Transform announces Azure-to-AWS cloud-native code conversion
👍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, а не от подмен.
👉🏻 Канал | 💬 Чат | 📕 Каталог
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, а не от подмен.
👉🏻 Канал | 💬 Чат | 📕 Каталог
Andrew Lock | .NET Escapades
Stripping extra dependencies in .NET NativeAOT apps using linker substitutions
In this post I describe how to perform method-substitutions with the NativeAOT linker to remove additional dependencies that the linker couldn't see were unused
❤1