Идиоматичный .NET 8/9 в Claude — скиллы для xUnit-тестирования, BenchmarkDotNet производительности, NuGet-упаковки, корректности async/await и стиля C#.
Скиллы .NET от Aaron Stannard — это battle-tested набор для серьёзных .NET-разработчиков. Помимо простой генерации кода, охватывают части, которые модель привычно делает неправильно: async cancellation, использование ConfigureAwait, IDisposable, компромиссы struct vs class, паттерны BenchmarkDotNet, метаданные NuGet-пакетов и современный стиль xUnit + FluentAssertions.
Добавьте в context_servers. Zed перезагружается автоматически.
claude mcp add dotnet-skills-aaronontheweb -- git clone https://github.com/Aaronontheweb/dotnet-skills ~/.claude/skills/dotnet
Однострочная команда. Проверить: claude mcp list. Удалить: claude mcp remove.
Сценарии использования
Реальные сценарии: .NET Skills
Проверить сервис на корректность async/await
👤 Backend .NET-команды⏱ ~45 minadvanced
Когда использовать: Достался в наследство сервис с нестабильными дедлоками и подозрение на async-проблемы.
Предварительные требования
Скилл установлен — git clone https://github.com/Aaronontheweb/dotnet-skills ~/.claude/skills/dotnet
Поток
Сканировать
dotnet-skills async audit на src/. Отметь: отсутствующий ConfigureAwait(false) в библиотеках, .Result/.Wait, async void (не обработчик событий), отсутствующее распространение CancellationToken.✓ Скопировано
→ Конкретный список file:line с уровнями серьёзности
Исправить один кластер
Возьми кластер с наибольшей серьёзностью (риск дедлока). Предложи патчи, файл за файлом. Покажи дифы.✓ Скопировано
→ Точечные патчи, а не переписывание целых файлов
Итог: Улучшена async-гигиена; один источник нестабильных дедлоков устранён.
Подводные камни
Фикс ConfigureAwait ломает UI-thread код — Скилл различает lib vs app код; соблюдай эту границу
Когда использовать: Профайлер указывает на метод; нужны строгие измерения.
Поток
Создать бенчмарк
Скилл: создай BenchmarkDotNet-проект для OrderCalc.Compute. Несколько размеров входных данных. Memory diagnoser включён. Markdown exporter.✓ Скопировано
→ Бенчмарк-проект компилируется; запускается в Release
Запустить + интерпретировать
Запусти бенчмарк. Сообщи mean, allocated, gen0. Что является основным источником выделения памяти?✓ Скопировано
→ Конкретная атрибуция источнику (вероятно string concat или LINQ)
Запатчить + перезапустить
Замени LINQ на ручной цикл. Перезапусти. Покажи до/после.✓ Скопировано
→ Выделение памяти измеримо снижается
Итог: Количественно измеренное улучшение производительности, а не ощущения.
Подводные камни
Запуск Debug-сборок — BenchmarkDotNet отказывает в Debug; убедись что Release
Подготовить библиотеку к публикации на NuGet
👤 Авторы OSS⏱ ~30 minintermediate
Когда использовать: Первый NuGet-релиз библиотеки; нужно чтобы выглядело полированно.
Поток
Аудит упаковки
dotnet-skills: проверь MyLib.csproj на готовность к NuGet. Проверь Description, Authors, License, RepositoryUrl, source-link, multi-targeting.✓ Скопировано
→ Конкретный список недостающих полей
Ревью поверхности API
Сгенерируй публичную поверхность API; отметь утечки внутренних типов или странно именованные публичные элементы.✓ Скопировано
→ Вывод поверхности API с обозначенными проблемами
Итог: Чистый пакет готовый к публикации.
Подводные камни
Несоответствие лицензий (файл LICENSE vs <PackageLicenseExpression>) — Скилл это обнаружит; приведи к единому виду