Подтвердить что ты не робот

Как заставить VS 2010 пропустить "сборку" проектов, которые не изменились?

Наш продукт имеет более 100 проектов (500 + ksloc производственного кода). Большинство из них - проекты С#, но мы также мало используем С++/CLI для связывания коммуникаций с собственным кодом.

Восстановление всего решения занимает несколько минут. Это здорово. Если я хочу перестроить решение, я ожидаю, что это займет некоторое время. То, что не хорошо, - это время, необходимое для создания решения после полной перестройки. Представьте, что я использовал полную перестройку и теперь без каких-либо изменений в решении я нажимаю Build (F6 или Ctrl + Shift + B). Почему требуется 35 секунд, если не было никаких изменений? На выходе я вижу, что он начал "строить" каждый проект - он не выполняет реальную сборку, но делает то, что потребляет значительное количество времени.

Эта задержка - это боль в заднице. Да, я могу улучшить время, не используя решение сборки, а только создав проект (Shift + F6). Если я запускаю проект сборки по конкретному тестовому проекту, над которым я сейчас работаю, он будет принимать "только" 8 + s. Он требует, чтобы я запускал сборку проекта по правильному проекту (тестовый проект также обеспечивал сборку зависимого проверенного кода). По крайней мере, тестировщик ReSharper правильно распознает, что только этот единственный проект должен быть сборкой, а повторный запуск обычно содержит только компиляцию 8 + s. Моя текущая кодировка Kata: не касайтесь Ctrl + Shift + B.

Сбор тестового проекта займет 8 секунд, даже если я не сделаю никаких изменений. Причина, по которой он занимает 8 секунд, состоит в том, что он также "строит" зависимости = в моем случае он "строит" более 20 проектов, но я вносил изменения только в unit test или одну зависимость! Я не хочу, чтобы он касался других проектов.

Есть ли способ просто сказать VS построить только проекты, в которых были сделаны некоторые изменения, и проекты, зависящие от измененных (предпочтительно эта часть как другая опция сборки)? Я беспокоюсь, вы скажете мне, что это именно то, что делает VS, но по-разному...

Я хочу улучшить свой опыт TDD и сократить время компиляции (в TDD компиляция может произойти дважды в минуту).

Чтобы сделать это еще более расстроенным, я работаю в команде, где большинство разработчиков работало над Java-проектами до присоединения к ней. Таким образом, вы можете себе представить, как они разозлились, когда они должны использовать VS, в отличие от полной инкрементной компиляции в Java. Мне не требуется инкрементальная компиляция классов. Я ожидаю, что мы будем работать с инкрементальной компиляцией решений. Особенно в продукте, таком как VS 2010 Ultimate, который стоит несколько тысяч долларов.

Я действительно не хочу получать ответы вроде:

  • Сделайте отдельное решение
  • Выгрузить проекты, которые вам не нужны.
  • и др.

Я могу прочитать эти ответы здесь. Это не приемлемые решения. Мы не платим за VS, чтобы делать такие компромиссы.

4b9b3361

Ответ 1

По умолчанию Visual Studio всегда будет выполнять сборку каждого проекта в вашем решении при запуске одного проекта. Даже если этот проект не зависит от любого другого проекта в вашем решении.

Перейдите в раздел Инструменты. Параметры | Проекты и решения | Сборка и запуск и установите флажок "Только создавать проекты запуска и зависимости от Run". Поскольку теперь, когда вы запускаете свой проект (клавиша F5), Visual Studio будет только строить ваш проект запуска и те проекты в вашем решении, от которых он зависит.

Ответ 2

Есть ли способ просто сказать VS построить только проекты, где некоторые были сделаны изменения и проекты, зависящие от измененных (предпочтительнее эта часть как другой вариант сборки)? Я волнуюсь, ты скажешь мне, что это именно то, что делает VS, но по-разному...

Не совсем (вы это уже понимаете).

Вы говорите о "системе сборки". MSVS - это не так. Это IDE, которая позволяет вам организовать свои активы в проектах и ​​решениях, да и "строить". Но это не система сборки. Это никогда не будет системой сборки (длинная история, но требуется совсем другая технология).

В отличие от этого, MSVS представляет собой IDE для ускоренной итеративной разработки, включая цикл "отладки" (например, "шаг за шагом" и "переключение" в debbugger во время запуска системы). То, что MSVS "сияет".

Он не будет и никогда не будет "сиять" как система сборки. Это не то, что было создано для этого. И это, вероятно, никогда не изменится (длинная история, даже Microsoft, скорее всего, согласится).

Я не пытаюсь быть симпатичным, и я искренне извиняюсь за доставку этой новости. Этот ответ тоже причиняет мне боль.

Я ожидаю, что будет работать инкрементная компиляция решений. Особенно в продукт, такой как VS 2010 Ultimate, который стоит несколько тысяч долларов.

MSVS - это среда для интерактивной отладки/разработки, а не система сборки (см. выше). Таким образом, вы измеряете его в сценарии продукта, для которого он не был разработан, и в котором он, вероятно, никогда не будет функционировать по вашему желанию.

Я действительно не хочу получать ответы вроде:

  • Сделайте отдельное решение
  • Выгрузить проекты, которые вам не нужны.
  • и др.

Я могу прочитать эти ответы. Это не приемлемые решения. Мы не платим за VS, чтобы делать такие компромиссы.

Ваши ожидания разумны. Я тоже хочу их. Тем не менее, MSVS не является продуктом, который когда-либо будет доставлять это.

Опять же, я не пытаюсь быть "симпатичным". Если вы хотите инвестировать в "систему сборки", вы можете найти ценность в использовании CMake, чтобы управлять вашими конфигурациями и экспортировать Makefiles (или что-то ) для выполнения ваших "реальных" сборок, но также для "экспорта" *.vcproj и *.sln файлов, когда вы хотите работать итеративно и интерактивно в среде MSVS.

РЕДАКТИРОВАТЬ: Скорее всего, вам нужен SSD (твердотельный диск) для рабочего пространства сборки, чтобы получить 10-кратное увеличение скорости или RAM-диск для 100-кратного улучшения - в скорости для сборки (не издеваясь, 64 МБ ОЗУ на разъем LGA2011 дает вам 32 МБ RAM-диска, что мы и используем.)

Ответ 3

Одна вещь, которую вы можете сделать, это разбить приложение на небольшие решения, каждая из которых является сплоченной частью. Постройте каждое решение отдельно. Пусть каждое решение использует выходные данные решений, от которых он зависит, вместо использования исходного кода.

Это позволит сократить короткие циклы обратной связи для каждого компонента

EDIT: Модифицированное решение

Кроме того, вы создадите интегративную сборку, которая вместо того, чтобы получать все источники, компилировать и тестировать, будет получать бинарные продукты сборки компонентов CI build. Эта интегративная сборка должна запускаться после каждой успешной сборки компонента.

Эта сборка должна быть двоичным эквивалентом полной сборки (которую вы все равно должны строить каждую ночь), но займет значительно меньше времени для запуска, поскольку она запускается после инкремента компонента и не нуждается в компиляции или получении источники.

Кроме того, если вы используете систему построения корпоративного уровня, которая поддерживает концепцию распределения ваших сборок между несколькими агентами, вы сможете масштабировать свои усилия и сократить ваш полный цикл CI до количества времени, необходимого для построения самого длинного компонент и проверить интегративный набор (самое большее).

Надеюсь, что это поможет.

Ответ 4

Взвешивание немного поздно, но вы считали, что имеете разные конфигурации сборки?

Вы можете сказать, что визуальная студия не создает определенные проекты в зависимости от конфигурации сборки.

Разработчик может просто выбрать конфигурацию, соответствующую проекту, над которым они работают.

Ответ 5

Довольно древняя нить, но я могу сказать, что у меня была небольшая версия того же самого, и я обновился до Visual Studio 2012, и проблемы, похоже, наконец-то были исправлены. Решение RedGate.NET Demon, упомянутое выше, также работает довольно хорошо.

Ответ 7

Я нашел инструмент, который в основном делает то, что я хочу (и даже больше): RedGate.NET Demon. Вероятно, это первая версия, потому что я столкнулся с небольшими проблемами в нашем большом решении (проблемы с проектами на С++, проблемы с коммутационными целями сборки и некоторые другие), но мне это очень нравится. Мне особенно нравится, как он пытается отслеживать измененные файлы в VS IDE и восстанавливает только затронутые проекты.

Изменить:.NET Demon был удален, так как он не нужен для VS 2015. Он по-прежнему работает с предыдущими версиями.