Разница между перестроением и чисткой + сборка в Visual Studio - PullRequest
287 голосов
/ 08 августа 2009

В чем разница между перестройкой и очисткой + сборкой в Visual Studio 2008? Clean + Сборка отличается от выполнения Очистка + Восстановление ?

Ответы [ 5 ]

292 голосов
/ 08 августа 2009

Перестроить = Очистить + Сборка (обычно)

Примечательные детали:

  1. Для многопроектного решения «решение по перестройке» выполняет «очистку» с последующей «сборкой» для каждого проекта (возможно, параллельно). Принимая во внимание, что «чистое решение», за которым следует «решение для сборки», сначала очищает все проекты (возможно, параллельно), а затем строит все проекты (возможно, параллельно). Эта разница в последовательности событий может стать значительной, когда в игру вступают межпроектные зависимости.

  2. Все три действия соответствуют целям MSBuild. Таким образом, проект может переопределить действие Rebuild, чтобы сделать что-то совершенно другое.

160 голосов
/ 08 августа 2009

Эрл прав, что в 99% случаев Rebuild = Clean + Build.

Но они не обязательно будут одинаковыми. 3 действия (перестроить, собрать, очистить) представляют разные цели MSBuild. Каждый из которых может быть переопределен любым файлом проекта для выполнения пользовательских действий. Таким образом, кто-то может полностью переопределить rebuild, выполнив несколько действий перед началом clean + build (или полностью удалить их).

Очень угловой случай, но указывающий на это из-за комментариев.

51 голосов
/ 17 февраля 2012

1 за проект, перестроить проект = (очистить проект + построить проект).

2 на решение, перестроить Sln = проект foreach (очистить проект + построить проект)! = Очистить Sln + построить Sln

Скажем, у вас есть Sln, содержит proj1, proj2 и proj3.

Перестроить Sln = (Очистить proj1 -> Построить Proj1) + (Очистить proj2 -> Построить Proj2) + (Очистить proj3 -> Построить Proj3)

Очистка Sln + Сборка Sln = (Очистка proj1 + Очистка proj2 + Очистка proj3) -> (Сборка proj1 + Сборка proj2 + Сборка proj3)

-> означает последовательный, + означает одновременный

так что есть вероятность, что когда вы отправите много изменений кода, пока вы не настроите зависимости проекта правильно, перестройка Sln приведет к тому, что некоторые из вас будут ссылаться на устаревшую библиотеку, потому что не гарантируется, что все сборки в конце концов будут очищает. (В этом случае Clean Sln + Build Sln выдаст ошибку ссылки и сообщит вам об этом немедленно, вместо того, чтобы показывать вам приложение со странным поведением)

11 голосов
/ 21 августа 2009

С http://www.cs.tufts.edu/r/graphics/resources/vs_getting_started/vs_getting_started.htm, (просто погуглил):

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

Build or Rebuild Solution строит или перестраивает все проекты в вашем решении, в то время как Build или Rebuild компилирует или перестраивает проект StartUp, "привет" на снимке экрана выше. Чтобы настроить проект автозагрузки, щелкните правой кнопкой мыши имя нужного проекта на вкладке «Обозреватель решений» и выберите «Установить как проект автозагрузки». Название проекта теперь выделено жирным шрифтом. Поскольку решения для домашних заданий обычно имеют только один проект, решение по сборке или перестроению фактически совпадает с решением по сборке или перестроению.

Compile просто компилирует исходный файл, который в данный момент редактируется. Полезно для быстрой проверки ошибок, когда остальные исходные файлы находятся в неполном состоянии, что помешает успешной сборке всего проекта. Ctrl-F7 - это сочетание клавиш для компиляции.

4 голосов
/ 15 декабря 2014

С этого блога , который автор связал как комментарий к этому вопросу :

На самом деле нет !!! они не равны.

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

...