使用 Microsoft Binlog MCP 服务器进行AI驱动的MSBuild调查——.NET博客
使用 Microsoft Binlog MCP 服务器进行AI驱动的MSBuild调查——.NET博客
MSBuild 二进制日志(.binlog 文件)包含关于构建的丰富信息——每个属性求值、目标执行、任务调用、错误和警告。但手动浏览这些数据可能会让人不知所措,尤其是在调试复杂的多项目解决方案时。如果你的 AI 编码助手能为你进行调查呢?
今天我们推出 Microsoft Binlog MCP 服务器,这是一个 Model Context Protocol(MCP,模型上下文协议)服务器,它让 GitHub Copilot 等 AI 助手可以直接访问你的构建日志。它解析 .binlog 文件并公开 15 个专用工具,支持 AI 驱动的构建失败诊断、属性追踪、性能分析和构建比较——全部通过自然语言对话完成。
为什么为构建日志使用 MCP?
Model Context Protocol(MCP)是一个开放标准,它允许 AI 助手以结构化方式调用外部工具。通过将 MSBuild 二进制日志分析封装在 MCP 服务器中,我们赋予 AI 助手以下能力:
- 通过查询错误、警告及其完整的项目/目标/任务上下文来调查构建失败
- 追踪属性来源,了解属性的值从何而来
- 通过识别最慢的项目、目标和任务来分析性能瓶颈
- 比较两个构建,发现属性和包的差异
- 读取构建期间捕获的嵌入式源文件
无需再手动翻阅 MSBuild Structured Log Viewer,你只需向 AI 助手提问,例如“我的构建为什么失败了?”或“什么让我的构建变慢了?”
AI 助手可用的 15 个工具
Microsoft Binlog MCP 服务器提供的工具分为四类:
构建调查
| 工具 | 功能说明 |
|---|---|
| binlog_overview | 构建状态、持续时间、项目数量、错误/警告数量 |
| binlog_errors | 构建错误,包含完整的项目、目标、任务、文件和行号上下文 |
| binlog_warnings | 构建警告,可按警告代码过滤 |
| binlog_search | 使用 StructuredLog Viewer 搜索 DSL 进行全文搜索 |
| binlog_projects | 列出所有项目及其构建状态和持续时间 |
| binlog_properties | MSBuild 属性值(精选默认值或过滤后的值) |
| binlog_items | MSBuild 项,如 PackageReference、Compile 等 |
| binlog_imports | .props 和 .targets 文件的完整导入链 |
| binlog_explain_property | 追踪属性值的来源——是哪个文件、目标或任务设置了它 |
嵌入式文件
| 工具 | 功能说明 |
|---|---|
| binlog_files | 列出或读取构建期间捕获的源文件 |
| binlog_search_files | 在所有嵌入式源文件中搜索文本 |
性能分析
| 工具 | 功能说明 |
|---|---|
| binlog_expensive_projects | 按独占持续时间排序的最慢项目 |
| binlog_expensive_targets | 整个构建中最慢的目标 |
| binlog_expensive_tasks | 整个构建中最慢的任务 |
构建比较
| 工具 | 功能说明 |
|---|---|
| binlog_compare | 比较两个 binlog——对比属性、包等 |
快速入门
最简单的入门方式是通过 .NET Agent Skills 仓库。dotnet-msbuild 插件将 Microsoft Binlog MCP 服务器与精选的技能和代理捆绑在一起,用于 MSBuild 构建调查和优化。
请选择与你开发环境匹配的部分。
Visual Studio
Visual Studio 通过 GitHub Copilot 的代理模式(Visual Studio 17.14 或更高版本)支持 MCP 服务器。安装 dotnet-msbuild 插件后,Copilot Chat 在代理模式下会自动发现 Microsoft Binlog MCP 服务器。打开 Copilot Chat 窗口,切换到代理模式,binlog_* 工具便可用于任何关于解决方案中 .binlog 文件的对话。
Visual Studio Code
在 VS Code 中,启用插件支持并将市场添加到你的 settings.json:
{
"chat.plugins.enabled": true,
"chat.plugins.marketplaces": ["dotnet/skills"]
}
然后从市场中安装 dotnet-msbuild 插件——Binlog MCP 服务器会自动配置好。
希望直接连接 MCP 服务器?将其添加到 .vscode/mcp.json:
{
"servers": {
"binlog-mcp": {
"type": "stdio",
"command": "dotnet",
"args": ["tool", "run", "Microsoft.AITools.BinlogMcp"]
}
}
}
要在启动时预加载特定的 binlog,传入 --binlog 参数:
{
"servers": {
"binlog-mcp": {
"type": "stdio",
"command": "dotnet",
"args": ["tool", "run", "Microsoft.AITools.BinlogMcp", "--", "--binlog", "msbuild.binlog"]
}
}
}
命令行(Copilot CLI / Claude Code)
对于基于终端的 AI 助手,如 GitHub Copilot CLI 或 Claude Code,直接从 dotnet/skills 市场安装插件:
/plugin marketplace add dotnet/skills
/plugin install dotnet-msbuild@dotnet-agent-skills
重启你的助手,binlog_* 工具即可使用。你可以通过 /skills 验证它们是否已加载。
提示: 要生成二进制日志,请在
dotnet build、dotnet test或dotnet pack命令后添加/bl——例如:dotnet build /bl。
示例:诊断构建失败
一旦 MCP 服务器运行起来,并且你的 AI 助手可以访问 .binlog 文件,你就可以通过对话方式调查构建问题。下面是典型的工作流程:
- 生成 binlog:运行
dotnet build /bl捕获二进制日志 - 向助手提问:“我的构建失败了。你能调查 msbuild.binlog 并告诉我哪里出错了吗?”
- AI 进行调查:它调用
binlog_overview获取高层状态,然后调用binlog_errors检索实际错误及完整上下文,还可能使用binlog_explain_property或binlog_search追踪根本原因 - 获取可操作的指导:助手综合发现结果并建议具体的修复方法
对于性能调查,AI 使用 binlog_expensive_projects、binlog_expensive_targets 和 binlog_expensive_tasks 工具来识别瓶颈并推荐优化方案。
亲自尝试:比较两个构建
以下是立即上手体验 MCP 服务器的好方法。选择一个你定期构建的仓库——可以是你的产品,也可以是开源项目,如 dotnet/msbuild 或 microsoft/testfx——并从不同版本或配置中捕获两个二进制日志:
# 构建版本 A
git checkout main
dotnet build /bl:build-a.binlog
# 构建版本 B(不同分支、SDK 或配置)
git checkout my-feature-branch
dotnet build /bl:build-b.binlog
然后向 AI 助手提问:
“比较 build-a.binlog 和 build-b.binlog。哪些 MSBuild 属性和包版本发生了变化?这些变化是否影响了构建性能?”
在后台,助手调用 binlog_compare 比较属性和包,然后对两个日志使用 binlog_expensive_projects 和 binlog_expensive_targets,将更改与时间差异关联起来——将过去繁琐的并排日志比较变成了一次对话。
基于 StructuredLogger
Microsoft Binlog MCP 服务器底层使用 MSBuild Structured Log Viewer 库——与流行的 MSBuild Structured Log Viewer 桌面应用使用相同的引擎。binlog_search 工具支持完整的 StructuredLog Viewer 搜索 DSL,包括节点类型过滤器($error、$warning、$task、$target、$project)、使用 under() 的层级作用域,以及使用引号字符串的精确短语匹配。