BuildSmith
Что делала сборка и почему так долго. После каждой сборки строка состояния показывает её время и разницу с предыдущей; окно Временная шкала сборки показывает все проекты на шкале времени — какие шли параллельно, какие ждали и какой критический путь определил общее время.
Бесплатно · Visual Studio 2022 и 2026 · 14 языков интерфейса · без телеметрии
Зачем BuildSmith

Куда ушло время
Окно «Вывод» сообщает, что сборка заняла 1 мин 48 с. Временная шкала показывает, какие проекты его заняли, какие из них шли бок о бок и какую цепочку проектов пришлось ждать всей сборке.
Сравнение с такой же сборкой
Сборка Debug в main сравнивается с предыдущей сборкой Debug в main — а не с перестроением, сборкой 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 и так сообщает, и после сборки пишет один небольшой файл. Ни сборку, ни её журналирование он не меняет.
Сколько места на диске занимает история?
Совсем немного: сборка — это короткий список проектов с их временем. Настройки показывают размер рядом с Очистить всю историю, а старые сборки уходят сами по истечении выбранного срока.
Где сообщить о проблеме или предложить идею?
Создайте issue в репозитории Feedback на GitHub — там есть формы для ошибок и идей (пожалуйста, замените закрытые имена). Можно также воспользоваться вкладкой Q&A на Marketplace.
История изменений
1.0.0
- Первый выпуск: время сборки и его изменение в строке состояния, окно «Временная шкала сборки» с критическим путём, проекты, которые никогда не актуальны, история с поиском, датами и метками, сравнение до 10 сборок с копированием в Markdown, включение и выключение записи для каждого решения, панель инструментов SmithWorks, однократная просьба об оценке.