/ Каталог / Песочница / .NET Skills
● Сообщество Aaronontheweb ⚡ Сразу

.NET Skills

автор Aaronontheweb · Aaronontheweb/dotnet-skills

Идиоматичный .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.

Зачем использовать

Ключевые функции

Живое демо

Как выглядит на практике

готово

Установка

Выберите клиент

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "dotnet-skills-aaronontheweb": {
      "command": "git",
      "args": [
        "clone",
        "https://github.com/Aaronontheweb/dotnet-skills",
        "~/.claude/skills/dotnet"
      ],
      "_inferred": true
    }
  }
}

Откройте Claude Desktop → Settings → Developer → Edit Config. Перезапустите после сохранения.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "dotnet-skills-aaronontheweb": {
      "command": "git",
      "args": [
        "clone",
        "https://github.com/Aaronontheweb/dotnet-skills",
        "~/.claude/skills/dotnet"
      ],
      "_inferred": true
    }
  }
}

Cursor использует ту же схему mcpServers, что и Claude Desktop. Конфиг проекта приоритетнее глобального.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "dotnet-skills-aaronontheweb": {
      "command": "git",
      "args": [
        "clone",
        "https://github.com/Aaronontheweb/dotnet-skills",
        "~/.claude/skills/dotnet"
      ],
      "_inferred": true
    }
  }
}

Щёлкните значок MCP Servers на боковой панели Cline, затем "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "dotnet-skills-aaronontheweb": {
      "command": "git",
      "args": [
        "clone",
        "https://github.com/Aaronontheweb/dotnet-skills",
        "~/.claude/skills/dotnet"
      ],
      "_inferred": true
    }
  }
}

Тот же формат, что и Claude Desktop. Перезапустите Windsurf для применения.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "dotnet-skills-aaronontheweb",
      "command": "git",
      "args": [
        "clone",
        "https://github.com/Aaronontheweb/dotnet-skills",
        "~/.claude/skills/dotnet"
      ]
    }
  ]
}

Continue использует массив объектов серверов, а не map.

~/.config/zed/settings.json
{
  "context_servers": {
    "dotnet-skills-aaronontheweb": {
      "command": {
        "path": "git",
        "args": [
          "clone",
          "https://github.com/Aaronontheweb/dotnet-skills",
          "~/.claude/skills/dotnet"
        ]
      }
    }
  }
}

Добавьте в 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 min advanced

Когда использовать: Достался в наследство сервис с нестабильными дедлоками и подозрение на async-проблемы.

Предварительные требования
  • Скилл установлен — git clone https://github.com/Aaronontheweb/dotnet-skills ~/.claude/skills/dotnet
Поток
  1. Сканировать
    dotnet-skills async audit на src/. Отметь: отсутствующий ConfigureAwait(false) в библиотеках, .Result/.Wait, async void (не обработчик событий), отсутствующее распространение CancellationToken.✓ Скопировано
    → Конкретный список file:line с уровнями серьёзности
  2. Исправить один кластер
    Возьми кластер с наибольшей серьёзностью (риск дедлока). Предложи патчи, файл за файлом. Покажи дифы.✓ Скопировано
    → Точечные патчи, а не переписывание целых файлов

Итог: Улучшена async-гигиена; один источник нестабильных дедлоков устранён.

Подводные камни
  • Фикс ConfigureAwait ломает UI-thread код — Скилл различает lib vs app код; соблюдай эту границу
Сочетать с: filesystem

Бенчмарк горячего пути с BenchmarkDotNet

👤 Разработчики .NET, интересующиеся производительностью ⏱ ~60 min advanced

Когда использовать: Профайлер указывает на метод; нужны строгие измерения.

Поток
  1. Создать бенчмарк
    Скилл: создай BenchmarkDotNet-проект для OrderCalc.Compute. Несколько размеров входных данных. Memory diagnoser включён. Markdown exporter.✓ Скопировано
    → Бенчмарк-проект компилируется; запускается в Release
  2. Запустить + интерпретировать
    Запусти бенчмарк. Сообщи mean, allocated, gen0. Что является основным источником выделения памяти?✓ Скопировано
    → Конкретная атрибуция источнику (вероятно string concat или LINQ)
  3. Запатчить + перезапустить
    Замени LINQ на ручной цикл. Перезапусти. Покажи до/после.✓ Скопировано
    → Выделение памяти измеримо снижается

Итог: Количественно измеренное улучшение производительности, а не ощущения.

Подводные камни
  • Запуск Debug-сборок — BenchmarkDotNet отказывает в Debug; убедись что Release

Подготовить библиотеку к публикации на NuGet

👤 Авторы OSS ⏱ ~30 min intermediate

Когда использовать: Первый NuGet-релиз библиотеки; нужно чтобы выглядело полированно.

Поток
  1. Аудит упаковки
    dotnet-skills: проверь MyLib.csproj на готовность к NuGet. Проверь Description, Authors, License, RepositoryUrl, source-link, multi-targeting.✓ Скопировано
    → Конкретный список недостающих полей
  2. Ревью поверхности API
    Сгенерируй публичную поверхность API; отметь утечки внутренних типов или странно именованные публичные элементы.✓ Скопировано
    → Вывод поверхности API с обозначенными проблемами

Итог: Чистый пакет готовый к публикации.

Подводные камни
  • Несоответствие лицензий (файл LICENSE vs <PackageLicenseExpression>) — Скилл это обнаружит; приведи к единому виду

Комбинации

Сочетайте с другими MCP — эффект x10

dotnet-skills-aaronontheweb + filesystem

Применять патчи по всему проекту

Применяй async_audit патчи по src/. Один коммит на файл.✓ Скопировано
dotnet-skills-aaronontheweb + github

PR с результатами бенчмарка

Открой PR с патчем производительности + бенчмарком до/после в описании.✓ Скопировано

Инструменты

Что предоставляет этот MCP

ИнструментВходные данныеКогда вызыватьСтоимость
async_audit path Проверка состояния кодовой базы 0
scaffold_benchmark target_method Работа над производительностью 0
interpret_bench bench_md После запуска бенчмарка 0
nuget_audit csproj До релиза 0
api_surface assembly_or_proj Ревью API 0
test_conventions_check test_path PR-ревью 0

Стоимость и лимиты

Во что обходится

Квота API
Н/П
Токенов на вызов
Аудиты сканируют код = более высокое потребление токенов; 5k–30k за проход
Деньги
Бесплатно
Совет
Проверяй по одному проекту за раз; не фанаутируй по всему монорепозиторию сразу

Безопасность

Права, секреты, радиус поражения

Минимальные скоупы: filesystem-read filesystem-write
Хранение учётных данных: Нет
Исходящий трафик: Нет

Устранение неполадок

Частые ошибки и исправления

Аудит слишком шумный

Укажи порог серьёзности; скилл по умолчанию выводит все

Бенчмарк не запускается

Нужна Release-сборка; BenchmarkDotNet отказывает в Debug

Проверить: dotnet build -c Release
Поверхность API включает internal типы

Убедись что InternalsVisibleTo настроен правильно; скилл выводит как сконфигурировано

Альтернативы

.NET Skills в сравнении

АльтернативаКогда использоватьКомпромисс
Roslyn analyzers в репозиторииНужна CI-time проверкаБольше настройки; менее интерактивно
ReSharper / RiderНужны IDE-time исправленияПлатно; не управляется LLM
Aspire / .NET Cloud Native skillsФокус на cloud-nativeДругая область

Ещё

Ресурсы

📖 Читать официальный README на GitHub

🐙 Открытые задачи

🔍 Все 400+ MCP-серверов и Skills