Как настроить VS для компиляции только измененного кода - PullRequest
9 голосов
/ 23 марта 2011

У меня очень большое решение, и оно компилируется каждый раз, когда я пытаюсь отладить.
Так что я знаю, что могу вообще отключить сборку всех проектов в конфигурации решения, но есть способ сказать VisualСтудион, чтобы скомпилировать только измененный код?
Я уверен, что это так.

Спасибо за внимание.

Ответы [ 4 ]

9 голосов
/ 23 марта 2011

Как уже сказали Марникс и Антон, VS обычно так и делает. Но если в вашем решении много проектов, которые зависят друг от друга, и вы вносите изменения в компонент, который будет использоваться всеми или большинством других проектов, он должен будет также собрать другие, чтобы убедиться, что все работает как положено .

Обновление

Так что, если он начинает перекомпилироваться, даже если вы не внесли никаких изменений, нам нужно выяснить, как VS пытается выяснить, что ему нужно делать в инкрементальной сборке.

Для этого он просто проверяет дату и время каждого файла и наличие каких-либо изменений. Если да, перекомпилируйте этот файл и все его зависимые элементы (например, изменения в stdafx.h приведут к полной перестройке, поскольку обычно каждый исходный файл ссылается на этот).

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

Так что, если у вас есть только проекты C / C ++, C #, VB и т. Д., Которые обычно поддерживают инкрементные сборки, должно быть что-то, что меняется между двумя сборками, даже если вы ничего не меняете.

Вот несколько возможностей:

  • Команда до или после сборки, которая вносит изменения в исходный файл
    • это может быть автоматическое обновление при добавлении номера ревизии из вашего репозитория в ресурс файла AssemblyInfo.
    • или команда copy / delete, которая вносит некоторые изменения в вашу структуру каталогов (я использовал это один раз, чтобы удалить выходной каталог в команде перед сборкой, чтобы принудительно перестроить каждую сборку).
  • Автоинкремент версии сборки
    • возможно, используя [assembly: AssemblyVersion("1.0.*")] или какой-либо другой внешний процесс для увеличения номера сборки

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

2 голосов
/ 23 марта 2011

Visual Studio фактически делает это из коробки, если вы делаете Build (не Rebuild). Тем не менее, он будет иметь дело с некоторыми типами проектов лучше, чем другие. Например, проект установки или развертывания всегда будет построен.

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

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

Насколько я знаю, MSBuild (механизм сборки, используемый VS) будет автоматически определять, что нужно перестраивать, основываясь на том, какие файлы были изменены. Поэтому убедитесь, что у вас нет сгенерированных файлов, которые обновляются с каждой сборкой. Например, при обновлении версии (сборки) с использованием метаданных контроля версий. Любой измененный файл вызовет сборку всех проектов, которые его используют, и всех проектов, которые зависят от них. Такая установка будет эффективно перестраивать большую часть вашего приложения каждый раз.

0 голосов
/ 11 августа 2012

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

Чтобы решить эту проблему, просто перейдите в диспетчер конфигурации (щелкните правой кнопкой мыши решение -> свойства -> свойства конфигурации) и снимите флажок «построить» проект установщика в режиме отладки.

0 голосов
/ 23 марта 2011

Вы должны использовать «Build Solution».Проверьте эту ссылку http://kiranpatils.wordpress.com/2008/04/02/what-is-the-difference-between-build-and-re-build-in-visual-studio-net/

...