BuildSmith
生成做了什么、为什么花了这么久。每次生成后,状态栏会显示所用时间及与上次相比的变化;生成时间线窗口则把每个项目都放在时间线上——哪些并行运行、哪些在等待,以及决定总时长的关键路径。
免费 · Visual Studio 2022 和 2026 · 14 种界面语言 · 无遥测
为什么选择 BuildSmith

时间花在了哪里
“输出”窗口只告诉你生成用了 1 分 48 秒。时间线则告诉你是哪些项目用掉了这些时间、哪些项目并行运行,以及整个生成必须等待哪条项目链。
与同类生成比较
main 上的 Debug 生成会与 main 上的上一次 Debug 生成比较——而不是与重新生成、Release 生成或其他分支比较。所以 ▲ 4.1 秒是有意义的。
安静
不会自动打开窗口,也没有任何弹窗:生成后状态栏里只有一行。关闭记录后,BuildSmith 会真正休眠——连生成事件都不监听。
免费,没有附加条件
没有订阅、没有“Pro”版、不收集数据,也不会在“输出”窗口或启动时显示消息。历史记录只保存在你的计算机上。我们唯一的请求是:在你用过一段时间之后,到 Marketplace 给个评分。支持 Visual Studio 2022 和 2026,x64 和 ARM64。
功能
- 每次生成后在状态栏中显示时间,以及与上一次可比生成相比的变化:
⏱ 1 min 48 s (▲ 4.1 s)。 - 生成时间线窗口:按开始顺序每个项目一条横条,标出关键路径,最新的项目以斜线表示,失败的项目显示为红色,每条横条旁显示与上次生成相比的变化。
- 从不处于最新状态的项目:即使解决方案的大部分都是最新的,每次增量生成仍会生成的项目,以及它们每次生成的耗时。
- 解决方案每次生成的历史记录,默认保留一周:搜索、日期范围、日历,以及一眼就能看出哪次生成慢的横条。
- 标签——“修复前”“新 SDK”——可选五种颜色之一或自定义颜色;带标签或标记为保留的生成永远不会因过期而删除。
- 比较 2 到 10 次生成:总时间的趋势,以及带彩色变化、迷你图和关键路径的项目 × 生成表格——可复制为 Markdown 用于拉取请求。
- 无需卸载即可关闭:可针对单个解决方案或全部关闭;历史记录会保留。
生成一览
打开生成 › 生成时间线(也可在视图 › 其他窗口和 SmithWorks 工具栏中找到)。窗口显示最近一次生成——或历史记录中的任意一次生成——顶部是摘要,下方每个项目一条横条。

状态栏中的时间
每次生成后,Visual Studio 的状态栏会显示所用时间及与上一次可比生成相比的变化:⏱ 1 min 48 s (▲ 4.1 s)——▲ 表示变慢,▼ 表示变快。这是 BuildSmith 唯一会主动显示的内容,并且可以在设置中关闭。
可比是指生成类型(生成或重新生成)、配置、平台和 Git 分支都相同。如果还没有这样的生成,则只显示时间。
标题区
窗口顶部汇总了当前显示的生成:
| 显示内容 | 含义 |
|---|---|
| ✓ 1 分 48 秒 较上次 ▲ 4.1 秒 | 结果(成功或失败)、总时间,以及显示与上一次可比生成相比变化的徽章;徽章的工具提示会说明那次生成用了多久、是什么时候。 |
| 14 个项目 · 已生成 9 · 最新 5 · 失败 1 | 参与的项目数、实际生成的数量、因已是最新而跳过的数量,以及失败的数量。 |
| 关键路径 1 分 31 秒 · Debug · Any CPU · main | 关键路径的长度,然后是该生成的配置、平台和 Git 分支。 |
| 生成选择器 | 可选择解决方案中任意一次已记录的生成,时间线会切换到该生成。 |
| 🏷 ⏻ ⚙ | 🏷 为当前显示的生成添加标签,⏻ 开启或关闭记录,⚙ 打开设置。 |
横条
| 显示内容 | 含义 |
|---|---|
| 蓝色横条 | 已生成的项目,按开始顺序每个项目一行:横条从生成开始后该项目实际开始的位置起始,长度即其耗时。相互重叠的横条表示并行运行,因此可以看出生成实际的并行程度。 |
| 橙色轮廓 | 关键路径:决定总时长的项目链,每个项目都要等待前一个。让其中任何一个变快,生成就会变快;其他项目都是在旁边并行运行的。 |
| 斜线短条 | 最新:其中没有任何更改,已跳过。 |
| 红色横条 | 项目生成失败。 |
| ▲ 2.4 秒 | 每条横条旁:其耗时,以及在变化明显时,与上一次可比生成中同一项目相比的变化。 |
将鼠标悬停在横条上可查看详细信息:项目耗时、在生成开始后从何时到何时、与上次生成相比的变化,以及是否位于关键路径上。
工作时可以一直开着这个窗口:每次新的生成都会自动切换过去。顶部有时间线、比较和历史记录选项卡。
从不处于最新状态的项目
有些项目即使没有任何更改,每次生成也都会被生成。每次只多花几秒,没人会注意到。BuildSmith 会注意到:在增量生成的时间线上方,有一条提示栏说明这类项目有多少个、每次生成要花多少时间。展开后会列出这些项目;它们在时间线上的行会带有 ⟳ 标记。

规则:如果某个项目在同一配置和分支最近 3 到 5 次增量生成中每次都被生成,而当时解决方案中超过一半是最新的,就会被指出。重新生成不计在内——那时所有项目都是有意重新生成的。
常见原因:
- 某个文件设置了复制到输出目录:始终复制——改为如果较新则复制就够了;
- 生成前或生成后事件修改了项目所依赖的文件;
- 即使源未更改,每次生成都会重新生成的代码。
修复后,每次生成都能省下这些时间。可以在设置中关闭这条提示栏:指出从不处于最新状态的项目。
历史记录
历史记录选项卡列出解决方案已记录的生成,最新的在前,按天分组。每行显示时间、生成类型、配置和分支、标签,以及与生成时间成比例的横条——慢的生成一眼就能看出来。

查找生成
在搜索框中输入——每个词都必须出现在标签、分支、配置或生成类型中。可用今天、昨天和今天、7 天或全部按日期缩小范围,也可以在日历中选择日期(日期…)。仅限有标签的只保留你添加了标签的生成。
打开、添加标签、保留、删除
单击某次生成(或按 Enter)即可在时间线中打开。右键单击可使用在时间线中打开、标签…、保留(永不删除)和删除。按 Delete 键删除生成,几秒钟内可撤消。⋯ 菜单可删除早于某个日期的生成,或清除此解决方案或所有解决方案的历史记录。
勾选生成即可比较它们,或一次删除多个。勾选有标签的会勾选当前显示的所有带标签的生成——这是比较“修复前”和“修复后”最快的方法。
生成保留多久
生成只保存在这台计算机上的 %LocalAppData%\BuildSmith 中,每个解决方案一份历史记录——保留 1 天、3 天、1 周(默认)、2 周或 1 个月。较旧的生成会在打开解决方案或生成结束时删除。带标签和标记为保留的生成无论多旧都会保留。
标签
标题区中的 🏷(或历史记录菜单中的标签…)可为生成添加一段简短文字和一种颜色:五种颜色之一,或从带调色板和最近颜色的小型选择器中选择自定义颜色。最近使用的标签只需单击即可再次使用,因此一系列生成可以共用同一个标签。
带标签的生成永远不会因过期而删除(除非你关闭保留有标签的生成)。保留(永不删除)可在不加标签的情况下固定一次生成。
记录
标题区中的 ⏻ 用于选择是否记录生成:
| 选项 | 效果 |
|---|---|
| 记录生成 | 默认设置:每次生成都会计时并保存到历史记录中。 |
| 此解决方案不记录 | 不再记录此解决方案,其他解决方案仍会记录。设置中会列出这些解决方案,并提供重新记录。 |
| 全部关闭 | BuildSmith 在所有解决方案中休眠。 |
休眠时,BuildSmith 真正什么也不做:不订阅生成事件,不向状态栏或磁盘写入任何内容。历史记录会保留,窗口中会提供重新记录生成。
比较生成
比较选项卡把多次生成并排放在一起:修复是否有效、更新后哪个项目变慢了、一周内生成时间如何变化。

选择生成
在历史记录中勾选 2 到 10 次生成,然后按 ⇄ 比较 N 个。如果没有勾选,比较会将当前显示的生成与上一次可比生成进行比较。这些生成会以标记块的形式显示在顶部;✕ 可将其从比较中移除。
趋势和表格
一个小图表显示每次生成的总时间。下方是项目 × 生成的表格:每个单元格按与第一次生成相比的变化着色——越暖越慢,绿色表示更快——并显示迷你图、变化值,项目位于关键路径上时还会显示 ●。没有明显变化的项目会折叠到… 另外 N 个无明显变化中。
只看你关心的项目
项目:…用于筛选表格:所有项目(N)、明显变化(N)、关键路径上(N)或仅勾选的项目,并带有搜索框。筛选器按解决方案记住,此时趋势会汇总筛选后项目的时间——是你的项目的趋势,而不是整个解决方案的趋势。
跨生成查看单个项目
单击某个项目,可查看它在每次所比较生成中的横条;带轮廓的横条表示它位于该次生成的关键路径上。‹ 所有项目可返回。
复制为 Markdown
⧉ 复制会把你看到的表格——相同的生成、相同的筛选器——以 Markdown 表格形式放到剪贴板上,可直接用于拉取请求或聊天。在单个项目视图中则复制该项目。
设置
工具 › 选项 › SmithWorks › BuildSmith(或生成时间线窗口中的 ⚙)。每个选项都有简短说明,介绍它的作用。
| 选项 | 默认值 |
|---|---|
| 记录生成 | 开 |
| 不记录的解决方案: | 没有关闭任何解决方案。 |
| 生成保留时长: | 1 周 |
| 保留有标签的生成 | 开 |
| 在状态栏中显示时间 | 开 |
| 指出从不处于最新状态的项目 | 开 |
| 请求在 Marketplace 上评分 | 开 |
清除所有历史记录(N 个解决方案,大小)…会删除所有解决方案已记录的生成,并询问是否保留带标签和标记为保留的生成。底部有重置为默认值、文档、在 Marketplace 上评价和发送反馈。
设置和历史记录保存在 %LocalAppData%\BuildSmith 中。

常见问题
BuildSmith 会发送任何数据吗?
不会。生成时间取自 Visual Studio 的生成事件,并保存在你的计算机上的 %LocalAppData%\BuildSmith 中。没有网络请求,也没有遥测。
为什么时间旁边没有显示变化?
因为还没有可比的生成:类型(生成或重新生成)、配置、平台和分支都相同的生成。再生成一次,变化就会出现。
关键路径到底是什么?
生成必须等待的项目链:每个项目都在前一个结束后才开始。无论你有多少个核心,它的长度就是这些项目所能达到的最短生成时间。加快不在关键路径上的项目并不能缩短生成时间。
生成后窗口仍然是空的。
请检查记录是否已开启(窗口中的 ⏻,设置中的记录生成),以及此解决方案是否不在不记录的解决方案列表中。在 Visual Studio 之外启动的生成(命令行中的 dotnet build)不会被记录。
BuildSmith 会拖慢生成吗?
不会。它只监听 Visual Studio 本来就会报告的每个项目的开始和结束,并在生成后写入一个小文件。它不会更改生成或其日志记录。
历史记录占用多少磁盘空间?
非常少:一次生成只是一个简短的项目及其时间列表。设置中会在清除所有历史记录旁显示大小,旧的生成会在所选期限过后自动删除。
在哪里报告问题或提出功能建议?
请在 GitHub 上的 Feedback 仓库中提交 issue——那里有用于报告错误和提出建议的表单(如有私密名称,请先替换)。也可以使用 Marketplace 上的 Q&A 选项卡。
更新日志
1.0.0
- 首次发布:状态栏中的生成时间及其变化,带关键路径的生成时间线窗口,从不处于最新状态的项目,带搜索、日期和标签的历史记录,最多 10 次生成的比较并可复制为 Markdown,按解决方案开启或关闭记录,SmithWorks 工具栏,一次性的评分请求。