В чем разница между простой перестройкой и сборкой Clean + Build в Visual Studio 2008? Отличается ли Clean + Build от выполнения Clean + Rebuild ?
В чем разница между простой перестройкой и сборкой Clean + Build в Visual Studio 2008? Отличается ли Clean + Build от выполнения Clean + Rebuild ?
Ответы:
Перестроить = очистить + построить (обычно)
Известные детали:
Для решения с несколькими проектами «решение по перестройке» выполняет «очистку» с последующей «сборкой» для каждого проекта (возможно, параллельно). Принимая во внимание, что «чистое решение», за которым следует «решение для сборки», сначала очищает все проекты (возможно, параллельно), а затем строит все проекты (возможно, параллельно). Эта разница в последовательности событий может стать значительной, когда в игру вступают зависимости между проектами.
Все три действия соответствуют целям MSBuild. Таким образом, проект может переопределить действие Rebuild, чтобы сделать что-то совершенно другое.
Эрл прав, что в 99% случаев Rebuild = Clean + Build.
Но они не гарантированы быть одинаковыми. 3 действия (перестроить, собрать, очистить) представляют разные цели MSBuild. Каждый из которых может быть переопределен любым файлом проекта для выполнения пользовательских действий. Таким образом, кто-то может полностью переопределить rebuild, выполнив несколько действий перед началом clean + build (или полностью удалить их).
Очень угловой случай, но указывающий на это из-за обсуждения комментариев.
Давайте определим реализацию Rebuild по умолчанию в терминах реализаций Clean и Build по умолчанию:
Для каждого проекта: перестроить проект = очистить проект + построить проект.
По решению: перестроить sln = foreach проект в sln (чистый проект + построить проект).
Обратите внимание, что из-за различий в порядке выполнения Rebuild sln отличается от (Clean sln + Build sln) = (foreach проект в sln Очистить проект) + (foreach проект в sln Build project). Кроме того, этот «foreach» может выполняться одновременно, поэтому разные задачи могут выполняться одновременно в двух сценариях.
Скажем, у вас есть sln, который содержит proj1, proj2 и proj3.
Перестроить sln = (Очистить proj1 + Построить proj1) & (Очистить proj2 + Построить proj2) & (Очистить proj3 + Построить proj3)
Clean Sln + Build Sln = (Очистить proj1 & Очистить proj2 & Очистить proj3) + (Создать proj1 & Build proj2 & Build proj3)
+ означает последовательный, & означает одновременный.
Поэтому, если зависимости проекта не настроены правильно, есть вероятность, что при выполнении Rebuild sln некоторые ваши проекты ссылаются на устаревшую библиотеку. Это потому, что не гарантируется, что все очистки будут завершены до начала первой сборки. Если вы выполните команду Clean sln + Build sln, они выдадут ошибку ссылки и немедленно сообщат вам об этом, вместо того, чтобы показывать вам приложение со странным поведением.
От http://www.cs.tufts.edu/r/graphics/resources/vs_getting_started/vs_getting_started.htm , (просто погуглил):
Сборка означает компиляцию и компоновку только исходных файлов, которые изменились с момента последней сборки, в то время как перестройка означает компиляцию и компоновку всех исходных файлов независимо от того, изменились они или нет. Сборка - это нормальное занятие, которое выполняется быстрее. Иногда версии целевых компонентов проекта могут быть не синхронизированы, и для успешной сборки требуется перестройка. На практике вам никогда не нужно чистить.
Build or Rebuild Solution строит или перестраивает все проекты в вашем решении, в то время как Build или Rebuild компилирует или перестраивает проект StartUp, "привет" на снимке экрана выше. Чтобы настроить проект автозагрузки, щелкните правой кнопкой мыши имя нужного проекта на вкладке «Обозреватель решений» и выберите «Установить как проект автозагрузки». Название проекта теперь выделено жирным шрифтом. Поскольку решения для домашних заданий обычно имеют только один проект, решение по сборке или перестроению фактически совпадает с решением по сборке или перестроению.
Компиляция просто компилирует исходный файл, который в данный момент редактируется. Полезно для быстрой проверки ошибок, когда остальные исходные файлы находятся в неполном состоянии, что помешает успешной сборке всего проекта. Ctrl-F7 - это сочетание клавиш для компиляции.
Из этого поста в блоге, на который автор ссылался как комментарий к этому вопросу :
Вообще-то, нет!!! они не равны.
Разница заключается в последовательности проектов, которые будут очищены и собраны. Допустим, у нас есть два проекта в решении. Очистка и последующая сборка будут выполнять очистку для обоих проектов, и затем сборка будет выполняться индивидуально, в то время как при восстановлении проект А будет получать и очищать, а затем строить после того, как этот проект Б будет очищен, а затем будет построен и так далее.