LazowskiAnton · Extensions

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。

功能

生成一览

打开生成 › 生成时间线(也可在视图 › 其他窗口和 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 个项目从不处于最新状态,每次生成 6.4 秒;项目列表和常见原因

规则:如果某个项目在同一配置和分支最近 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 选项页
选项页。

常见问题

BuildSmith 会发送任何数据吗?

不会。生成时间取自 Visual Studio 的生成事件,并保存在你的计算机上的 %LocalAppData%\BuildSmith 中。没有网络请求,也没有遥测。

为什么时间旁边没有显示变化?

因为还没有可比的生成:类型(生成或重新生成)、配置、平台和分支都相同的生成。再生成一次,变化就会出现。

关键路径到底是什么?

生成必须等待的项目链:每个项目都在前一个结束后才开始。无论你有多少个核心,它的长度就是这些项目所能达到的最短生成时间。加快不在关键路径上的项目并不能缩短生成时间。

生成后窗口仍然是空的。

请检查记录是否已开启(窗口中的 ⏻,设置中的记录生成),以及此解决方案是否不在不记录的解决方案列表中。在 Visual Studio 之外启动的生成(命令行中的 dotnet build)不会被记录。

BuildSmith 会拖慢生成吗?

不会。它只监听 Visual Studio 本来就会报告的每个项目的开始和结束,并在生成后写入一个小文件。它不会更改生成或其日志记录。

历史记录占用多少磁盘空间?

非常少:一次生成只是一个简短的项目及其时间列表。设置中会在清除所有历史记录旁显示大小,旧的生成会在所选期限过后自动删除。

在哪里报告问题或提出功能建议?

请在 GitHub 上的 Feedback 仓库中提交 issue——那里有用于报告错误和提出建议的表单(如有私密名称,请先替换)。也可以使用 Marketplace 上的 Q&A 选项卡。

更新日志

1.0.0