我构建了一个能够理解你的 MSBuild 项目图的 MCP 服务器——在你构建之前

发布: (2026年4月5日 GMT+8 03:25)
7 分钟阅读
原文: Dev.to

Source: Dev.to

(请提供需要翻译的正文内容,我才能为您进行简体中文翻译。)

介绍

让你的 AI 编码助手查询你的 .NET 解决方案结构,你会看到它产生幻觉。它会猜测项目引用,遗漏 TFM 不匹配,并自信地告诉你不真实的内容——因为它根本无法真正评估你的 MSBuild 项目文件。

现有工具如 BinlogInsights 需要先进行构建,然后分析二进制日志。这很有用,但这意味着在提问之前必须先成功构建。若你的解决方案已损坏怎么办?如果你只是想在迁移前了解依赖图怎么办?

我构建了 MSBuild Graph MCP Server 来填补这一空白。它直接评估 MSBuild 项目文件——无需构建——并通过 10 个 MCP 工具公开结果,任何 AI 助手都可以调用。

它的功能

将其安装为 .NET 全局工具:

dotnet tool install -g MsBuildGraphMcp

然后向你的助手提出自然语言问题:

  • “显示此解决方案的依赖图” → 完整的有向无环图并进行拓扑排序
  • “是否存在 TFM 不匹配?” → 查找引用 net8.0 库的 net6.0 项目
  • “如果我移除 CoreLib,会有什么破坏?” → 对所有直接 + 传递依赖进行 BFS 遍历
  • “比较 Debug 与 Release” → 属性和包引用差异
  • “LangVersion 从哪里来?” → 追溯到 Directory.Build.props 第 3 行

10 个工具,按用途分组

理解结构

  • analyze_solution — 解析 .sln.slnx.slnf,并获取完整的项目元数据
  • get_project_graph — 依赖有向无环图(DAG),拓扑排序,图指标
  • find_shared_imports — 发现 Directory.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 — 分析项目属性值,并追踪来源文件和行号

Guided prompts

  • project-health-check — 对解决方案进行 1‑10 的健康评分
  • migration-readiness — 评估 .NET 版本升级的可行性

预构建 vs 后构建 分析

特性MSBuild Graph MCP典型 Binlog 工具
需要构建
在损坏的解决方案上工作
依赖分析完整有向无环图受限
TFM 兼容性检查是(NuGet.Frameworks)
影响分析
配置差异

预构建分析直接通过 MSBuild 的 ProjectGraph API 对项目文件进行评估,这在规划迁移、加入大型代码库或调试尚未能够编译的解决方案时至关重要。

Security: 15 Measures, Zero Side Effects

所有工具都是只读的:不会触发构建,不会修改文件,不会发起网络请求,也不会执行任意命令。

关键防护措施:

  • 启动守护阻止 MSBUILDENABLEALLPROPERTYFUNCTIONS – 缓解 CVE‑2025‑21172(属性函数远程代码执行)
  • 预评估 XML 扫描器在 MSBuild 评估项目文件之前检测项目文件中对 System.IO.FileSystem.NetSystem.Diagnostics 的使用
  • 对所有 ProjectCollection 实例设置 IsBuildEnabled = false – 防止目标执行
  • 拒绝 UNC 路径、扩展名白名单、符号链接检测、输入长度上限
  • 错误净化会从响应中剥离用户路径和堆栈跟踪
  • 允许的目录可通过环境变量 MSBUILD_MCP_ALLOWED_PATHS 配置

MSBuild 属性函数在评估期间执行,这是设计如此——其信任模型与在 Visual Studio 中打开项目相同。请仅分析您信任的项目。

测试套件

测试套件针对 real MSBuild APIs(无 mock)运行。TempSolutionBuilder fixture 在临时目录中为每个场景创建实际的 .sln/.slnx/.csproj 文件。

结果:

  • 333 tests 在 CI 上约 12 秒内通过
  • 捕获了 8 个生产缺陷,包括:
    • CircularDependencyException 未被捕获(MSBuild 将其单独抛出,而不是 MSB4251
    • 对重复的 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

该服务器同样支持 CursorWindsurfVisual Studio 2026 Preview

要求: .NET SDK 8.0+ 且运行在 Windows(MSBuildLocator 会发现 VS/.NET SDK 安装)。

试一试

  1. 安装工具(见上文)。
  2. 将你的 AI 助手指向一个 .NET 解决方案。
  3. 提问:“对该解决方案运行项目健康检查。”

project-health-check 提示会运行所有 10 个工具,并生成带有可操作建议的评分报告。

链接

MIT 许可证。欢迎贡献。

0 浏览
Back to Blog

相关文章

阅读更多 »