나는 당신의 MSBuild 프로젝트 그래프를 이해하는 MCP 서버를 만들었습니다 — 빌드하기 전에

발행: (2026년 4월 5일 AM 04:25 GMT+9)
8 분 소요
원문: Dev.to

Source: Dev.to

소개

AI 코딩 어시스턴트에게 .NET 솔루션 구조에 대해 물어보면 환상을 보여줍니다. 프로젝트 참조를 추측하고, TFM 불일치를 놓치며, 실제로 MSBuild 프로젝트 파일을 평가할 방법이 없기 때문에 사실이 아닌 내용을 자신 있게 말합니다.

BinlogInsights와 같은 기존 도구는 먼저 빌드를 수행한 뒤 바이너리 로그를 분석해야 합니다. 이는 유용하지만, 질문을 하기 전에 성공적인 빌드가 필요하다는 의미입니다. 솔루션이 깨졌다면 어떨까요? 마이그레이션 전에 의존성 그래프만 이해하고 싶다면 어떨까요?

이 격차를 메우기 위해 MSBuild Graph MCP Server 를 만들었습니다. 빌드 없이 직접 MSBuild 프로젝트 파일을 평가하고, 10개의 MCP 도구를 통해 결과를 노출하여 어떤 AI 어시스턴트도 호출할 수 있게 합니다.

무엇을 수행합니까

dotnet tool install -g MsBuildGraphMcp

그런 다음 어시스턴트에게 자연어 질문을 해보세요:

  • “이 솔루션의 의존성 그래프를 보여줘” → topological sort가 적용된 전체 DAG
  • “TFM 불일치가 있나요?”net6.0 프로젝트가 net8.0 라이브러리를 참조하는 경우를 찾음
  • “CoreLib를 제거하면 무엇이 깨지나요?” → 직접 + 전이적 종속자를 모두 BFS로 탐색
  • “Debug와 Release를 비교해줘” → 속성 및 패키지 참조 차이점 표시
  • “LangVersion은 어디서 오는 건가요?”Directory.Build.props 파일의 3번째 줄을 추적

10가지 도구, 목적별 그룹화

구조 이해

  • analyze_solution — 전체 프로젝트 메타데이터와 함께 .sln, .slnx, .slnf 파싱
  • get_project_graph — 의존성 DAG, 위상 정렬, 그래프 메트릭
  • find_shared_importsDirectory.Build.props/.targets 탐색
  • list_projects — 빠른 목록화, MSBuild 평가 오버헤드 없음

문제 찾기

  • detect_build_issues — TFM 불일치, 고아 프로젝트, 순환 의존성, 플랫폼 충돌
  • check_package_versions — NuGet 버전 일관성, CPM 감지, VersionOverride

영향 분석

  • analyze_impact — “프로젝트 X를 수정하면 무엇이 깨질까?”
  • get_build_order — 중요한 경로 길이를 고려한 위상 정렬

비교 및 검사

  • compare_configurations — 두 빌드 구성 간 차이점 비교
  • analyze_project_properties — 소스 파일 + 라인 추적과 함께 속성 값 분석

가이드 프롬프트

  • project-health-check — 솔루션을 1‑10점으로 평가
  • migration-readiness — .NET 버전 업그레이드 가능성 평가

사전 빌드 vs 사후 빌드 분석

기능MSBuild Graph MCP일반 Binlog 도구
빌드 필요 여부아니오
손상된 솔루션에서도 작동아니오
종속성 분석전체 DAG제한적
TFM 호환성 검사예 (NuGet.Frameworks)아니오
영향 분석아니오
구성 차이아니오

사전 빌드 분석은 MSBuild의 ProjectGraph API를 통해 프로젝트 파일을 직접 평가합니다. 이는 마이그레이션을 계획하거나 대규모 코드베이스에 온보딩할 때, 혹은 아직 컴파일되지 않은 솔루션을 디버깅할 때 매우 중요합니다.

보안: 15가지 조치, 부작용 제로

All tools are 읽기 전용: 빌드가 트리거되지 않으며, 파일이 수정되지 않고, 네트워크 요청도 없으며, 임의 명령도 실행되지 않습니다.

주요 안전 장치

  • 시작 가드MSBUILDENABLEALLPROPERTYFUNCTIONS를 차단합니다 – CVE‑2025‑21172 (속성‑함수 원격 코드 실행)를 완화합니다
  • 사전 평가 XML 스캐너가 프로젝트 파일에서 System.IO.File, System.Net, System.Diagnostics 사용을 MSBuild가 평가하기 전에 감지합니다
  • 모든 ProjectCollection 인스턴스에서 IsBuildEnabled = false – 대상 실행을 방지합니다
  • UNC 경로 거부, 확장자 화이트리스트, 심볼릭 링크 감지, 입력 길이 제한
  • 오류 정화가 응답에서 사용자 경로와 스택 트레이스를 제거합니다
  • 허용 디렉터리는 MSBUILD_MCP_ALLOWED_PATHS 환경 변수로 구성할 수 있습니다

MSBuild 속성 함수는 설계상 평가 중에 실행됩니다 – 이는 Visual Studio에서 프로젝트를 여는 것과 동일한 신뢰 모델입니다. 신뢰할 수 있는 프로젝트만 분석하십시오.

테스트 스위트

테스트 스위트는 실제 MSBuild API(모의 객체 없음)를 대상으로 실행됩니다. TempSolutionBuilder 픽스처는 각 시나리오마다 임시 디렉터리에 실제 .sln/.slnx/.csproj 파일을 생성합니다.

결과:

  • 333개의 테스트가 CI에서 약 12 초 만에 통과
  • 8개의 프로덕션 버그가 발견되었습니다, 포함:
    • CircularDependencyException이 잡히지 않음 (MSBuild가 이를 MSB4251과 별도로 throw함)
    • 중복된 PackageReference에서 ToDictionary 충돌 (먼저 GroupBy 필요)
    • 예외 경로에서 리소스 누수 (try/finally 정리 추가)
    • 64‑코어 머신에서 무제한 병렬 처리 (최대 8로 제한)

시작하기

설치

dotnet tool install -g MsBuildGraphMcp

AI 어시스턴트 구성

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "msbuild-graph": {
      "command": "msbuild-graph-mcp"
    }
  }
}

VS Code (.vscode/mcp.json)

{
  "servers": {
    "msbuild-graph": {
      "type": "stdio",
      "command": "msbuild-graph-mcp"
    }
  }
}

Claude Code

claude mcp add msbuild-graph -- msbuild-graph-mcp

서버는 Cursor, Windsurf, 및 Visual Studio 2026 Preview와도 작동합니다.

요구 사항: .NET SDK 8.0+ 및 Windows (MSBuildLocator가 VS/.NET SDK 설치를 검색합니다).

사용해 보기

  1. 도구를 설치합니다 (위를 참조).
  2. .NET 솔루션을 AI 어시스턴트에 지정합니다.
  3. 다음과 같이 요청합니다: “이 솔루션에 대해 프로젝트 건강 검사를 실행하십시오.”

project-health-check 프롬프트는 10개의 모든 도구를 실행하고 실행 가능한 권장 사항이 포함된 점수 보고서를 생성합니다.

MIT 라이선스. 기여를 환영합니다.

0 조회
Back to Blog

관련 글

더 보기 »