/ 디렉터리 / 플레이그라운드 / .NET Skills
● 커뮤니티 Aaronontheweb ⚡ 바로 사용

.NET Skills

제작: Aaronontheweb · Aaronontheweb/dotnet-skills

Claude의 관용적인 .NET 8/9 — xUnit 테스트, BenchmarkDotNet 성능, NuGet 패키징, async/await 정확성, C# 스타일을 위한 스킬.

Aaron Stannard의 .NET Skills는 진지한 .NET 개발자를 위한 실전 검증된 번들입니다. 단순한 코드 생성을 넘어 모델이 습관적으로 틀리는 부분을 커버합니다: 비동기 취소, 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는 Claude Desktop과 동일한 mcpServers 스키마 사용. 프로젝트 설정이 전역보다 우선.

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
    }
  }
}

Cline 사이드바의 MCP Servers 아이콘 클릭 후 "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는 맵이 아닌 서버 오브젝트 배열 사용.

~/.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 정확성을 위한 서비스 감사

👤 백엔드 .NET 팀 ⏱ ~45 min advanced

언제 쓸까: 간헐적으로 데드락이 발생하는 서비스를 상속받았고 비동기 문제가 의심될 때.

사전 조건
  • 스킬 설치됨 — git clone https://github.com/Aaronontheweb/dotnet-skills ~/.claude/skills/dotnet
흐름
  1. 스캔
    src/에 대한 dotnet-skills 비동기 감사를 실행하세요. 다음을 표시: 라이브러리에서 ConfigureAwait(false) 누락, .Result/.Wait, async void (이벤트가 아닌), CancellationToken 전파 누락.✓ 복사됨
    → 심각도가 있는 구체적인 file:line 목록
  2. 한 클러스터 수정
    가장 높은 심각도 클러스터(데드락 위험)를 선택하세요. 파일별로 패치를 제안하세요. 차이를 보여주세요.✓ 복사됨
    → 전체 파일 다시 쓰기가 아닌 수술적 패치

결과: 비동기 위생 개선; 간헐적 데드락의 한 원인 해결

함정
  • ConfigureAwait 수정이 UI 스레드 코드를 깨뜨림 — 스킬이 lib vs 앱 코드를 구분; 그 경계를 존중
함께 쓰기: filesystem

BenchmarkDotNet으로 핫 패스 벤치마크

👤 성능에 관심 있는 .NET 개발자 ⏱ ~60 min advanced

언제 쓸까: 프로파일러가 메서드를 가리킬 때; 엄격한 숫자가 필요할 때.

흐름
  1. 벤치마크 스캐폴딩
    스킬: OrderCalc.Compute를 위한 BenchmarkDotNet 프로젝트를 스캐폴딩하세요. 여러 입력 크기. 메모리 진단기 켜기. Markdown 내보내기.✓ 복사됨
    → 벤치마크 프로젝트가 컴파일됨; Release에서 실행됨
  2. 실행 + 해석
    벤치마크를 실행하세요. 평균, 할당, gen0을 보고하세요. 주요 할당이 무엇인가요?✓ 복사됨
    → 할당자(아마 문자열 연결 또는 LINQ)에 대한 구체적인 귀인
  3. 패치 + 재벤치마크
    LINQ를 손으로 작성한 루프로 교체하세요. 다시 실행하세요. 이전/이후를 보여주세요.✓ 복사됨
    → 할당이 측정 가능하게 감소

결과: 느낌이 아닌 정량화된 성능 개선

함정
  • Debug 빌드 실행 — BenchmarkDotNet은 Debug를 거부; Release 확인

NuGet 릴리스를 위한 라이브러리 준비

👤 OSS 저자 ⏱ ~30 min intermediate

언제 쓸까: 라이브러리의 첫 NuGet 릴리스; 폴리시하게 만들고 싶을 때.

흐름
  1. 패키징 감사
    dotnet-skills: NuGet 준비를 위해 MyLib.csproj를 감사하세요. Description, Authors, License, RepositoryUrl, source-link, 멀티 타겟팅을 확인하세요.✓ 복사됨
    → 구체적인 누락 필드 목록
  2. API 표면 검토
    공개 API 표면을 생성하세요; 유출된 내부 타입이나 이상하게 명명된 공개 항목을 표시하세요.✓ 복사됨
    → 우려 사항이 표시된 API 표면 덤프

결과: 푸시할 준비가 된 깨끗한 패키지

함정
  • 라이선스 불일치 (LICENSE 파일 vs <PackageLicenseExpression>) — 스킬이 이를 잡음; 정렬하세요

조합

다른 MCP와 조합해 10배 효율

dotnet-skills-aaronontheweb + filesystem

프로젝트 전체에 패치 적용

src/ 전체에 async_audit 패치를 적용하세요. 파일별로 하나의 커밋.✓ 복사됨
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 표면에 내부 타입이 포함됨

InternalsVisibleTo가 올바르게 설정되었는지 확인; 스킬은 설정된 대로 보고

대안

.NET Skills 다른 것과 비교

대안언제 쓰나단점/장점
레포지토리의 Roslyn 분석기CI 시점 적용을 원할 때더 많은 설정; 인터랙티브가 아님
ReSharper / RiderIDE 시점 수정을 원할 때유료; LLM 기반 아님
Aspire / .NET Cloud Native skills클라우드 네이티브 포커스다른 범위

더 보기

리소스

📖 GitHub에서 공식 README 읽기

🐙 열린 이슈 보기

🔍 400+ MCP 서버 및 Skills 전체 보기