LazowskiAnton · Extensions

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.

Возможности

Сборка с первого взгляда

Откройте Сборка › Временная шкала сборки (также в Вид › Другие окна и на панели инструментов 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 и так сообщает, и после сборки пишет один небольшой файл. Ни сборку, ни её журналирование он не меняет.

Сколько места на диске занимает история?

Совсем немного: сборка — это короткий список проектов с их временем. Настройки показывают размер рядом с Очистить всю историю, а старые сборки уходят сами по истечении выбранного срока.

Где сообщить о проблеме или предложить идею?

Создайте issue в репозитории Feedback на GitHub — там есть формы для ошибок и идей (пожалуйста, замените закрытые имена). Можно также воспользоваться вкладкой Q&A на Marketplace.

История изменений

1.0.0