Разница между Rebuild и Clean + Build в Visual Studio

В чем разница между Rebuild и выполнением Clean + Build в Visual Studio 2008? Является ли Clean + Build другим, чем Clean + Rebuild?

Ответ 1

Rebuild = Clean + Build

Заметные детали:

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

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

Ответ 2

Граф правильно, что 99% времени Rebuild = Clean + Build.

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

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

Ответ 3

1 За проект, перестроить проект = (проект "Чистый проект + сборка" ).

2 За решение, перестроить проект Sln = foreach (проект Clean Project + Build)!= Clean Sln + Build Sln

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

Rebuild Sln = (Очистить proj1 → Build Proj1) + (Очистить proj2 → Build Proj2) + (Очистить proj3 → Build Proj3)

Очистить Sln + Build Sln = (Очистить proj1 + Очистить proj2 + Очистить proj3) → (Build proj1 + Build proj2 + Build proj3)

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

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

Ответ 4

Из http://www.cs.tufts.edu/r/graphics/resources/vs_getting_started/vs_getting_started.htm, (только погладил его):

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

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

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

Ответ 5

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

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

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