Как заставить VS 2010 пропускать «сборки» проектов, которые не изменились? - PullRequest
45 голосов
/ 06 декабря 2011

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

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

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

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

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

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

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

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

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

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

Ответы [ 7 ]

13 голосов
/ 06 декабря 2011

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

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

8 голосов
/ 06 декабря 2011

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

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

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

Напротив, MSVS - это IDE для ускоренной итеративной разработки, включая цикл «отладки» (например, «step-step»).в "и" step-over "в отладчике во время запуска системы).Вот где MSVS «сияет».

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

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

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

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

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

  • Примите отдельное решение
  • Выгрузите ненужные проекты
  • и т. д.

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

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

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

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

4 голосов
/ 06 декабря 2011

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

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

РЕДАКТИРОВАТЬ: модифицированное решение

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

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

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

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

2 голосов
/ 12 сентября 2012

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

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

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

1 голос
/ 21 февраля 2014

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

0 голосов
/ 10 апреля 2013

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

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

0 голосов
/ 25 ноября 2012

Это старая проблема.

Используйте параллельную сборку и SSD.Смотрите здесь (я думаю - быстрый Google): http://www.hanselman.com/blog/HackParallelMSBuildsFromWithinTheVisualStudioIDE.aspx

...