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

1137

В чем разница между Build Solution, Rebuild Solution и Clean Solution в Visual Studio?

Когда подходящее время использовать каждый из них?

Fawa
источник
3
Также см. Stackoverflow.com/questions/1247457/…
Грег
2
Является ли восстановление так же, как чистый, а затем построить?
полковник Паник
@ColonelPanic да
Алан Бертлз

Ответы:

921
  • Решение Build будет выполнять инкрементную сборку: если оно не думает, что нужно перестроить проект, оно не будет. Он также может использовать частично собранные биты проекта, если они не изменились (я не знаю, как далеко это займет)
  • Rebuild Solution очистит, а затем создаст решение с нуля, игнорируя все, что было сделано ранее. Разница между этим и «Очистить с последующим построением» заключается в том, что Rebuild будет очищать, а затем строить каждый проект, по одному, а не очищать все, а затем собирать все.
  • Чистое решение удалит артефакты сборки из предыдущей сборки. Если в целевых каталогах сборки (bin и obj) есть какие-либо другие файлы, они не могут быть удалены, но фактические артефакты сборки есть. Я видел поведение для этого различного - иногда удаляя довольно тщательно, а иногда нет - но я дам VS преимущество от сомнения на данный момент :)

(Ссылки на ключи командной строки devenv.exe , но они делают то же, что и пункты меню.)

Джон Скит
источник
2
@womp: Не в проекте, на который я только что смотрел. Там все еще есть все сборки ...
Джон Скит
1
@Jon - странно. Я не помню, чтобы чистка никогда не убирала эти каталоги. Я делаю это прямо сейчас, и он стирает все .dll и .pdb файлы. Определенно, оставляю мой мусор ReSharper в покое.
womp
156
Я лично нашел «Чистое решение» более чем бесполезным. Если я действительно хочу, чтобы он был чистым, вручную удалите папки bin и obj. Даже были пойманы погони за фантомными «ошибками» - пока я этого не сделал. Чистота просто не надежна.
Крис Роджерс
7
если артефакты пробирались другими способами, а не через артефакты сборки (например, копия из другого источника, интегрированного как msbuidltask в cproj), тогда команда clean оставляет их без изменений. Что делает его в значительной степени бесполезным, я бы даже сказал, что это опасно, так как оно оставит вас с ложным чувством чистоты.
Newtopian
4
@verdana: для github и т. д. проще иметь приличный .gitignoreфайл. Но согласно ответу, Clean не всегда делает особенно тщательную работу в моем опыте.
Джон Скит
455

Построение решения: Компилирует файлы кода (DLL и EXE), которые изменяются.

Перестроить: Удаляет все скомпилированные файлы и компилирует их снова, независимо от того, изменился код или нет.

Чистое решение: Удаляет все скомпилированные файлы (DLL и EXE-файл).

Вы можете посмотреть это видео на YouTube ( Visual Studio Build vs. Rebuild vs. Clean (вопросы интервью с C # с ответами) ), где я продемонстрировал различия, а ниже представлены визуальные представления, которые помогут вам проанализировать то же самое более подробно.

Build vs Rebuild

Разница между Rebuild и (Clean + Build), потому что, кажется, есть некоторая путаница и в этом:

Разница в том, как последовательность сборки и очистки происходит для каждого проекта. Допустим, у вашего решения есть два проекта, «proj1» и «proj2». Если вы сделаете пересборку, она возьмет «proj1», очистит (удалит) скомпилированные файлы для «proj1» и соберет его. После этого потребуется второй проект «proj2», очистите скомпилированные файлы для «proj2» и скомпилируйте «proj2».

Но если вы выполните «очистку» и сборку », он сначала удалит все скомпилированные файлы для« proj1 »и« proj2 », а затем сначала соберет« proj1 », а затем« proj2 ».

Rebuild Vs Clean

Шивпрасад Койрала
источник
26
Спасибо за объяснение, почему Rebuild не всегда работает, и мне часто нужно чистить перед сборкой.
Дидье А.
4
Да, описание и вторая диаграмма были очень полезны и понятны. Если бы вы могли исправить «нелегальную» блок-схему, чтобы «Да» отправлялся только в одно место, это помогло бы. Я действительно не могу понять, что тот пытается сказать, особенно с "Build ALL" в разделе "Rebuild".
Джон Кумбс
@JonCoombs Да, я не думаю, что первая блок-схема точно отражала то, что он сказал на видео. Я думаю, что изображение, которое я вставил - это то, к чему стремился Шивпрасад.
Ерф
Насколько я понимаю, если какой-либо файл изменился, проект очищается при обычной сборке, то есть он либо ничего не сделает, либо очистит, а затем соберет проект. Это правильно?
уточняю
147

Взяты из этой ссылки :

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

Мэтью Джонс
источник
1
Ссылка на сайт? Я думал, что идея DLL, или Dynamic Link Library, заключается в том, чтобы связать во время выполнения?
The Dag
7
«На практике вам никогда не нужно чистить» <- я звоню BS на этот раз.
piers7
2
piers7, можете ли вы указать причину, по которой вам понадобится очистить против восстановления?
PaulBinder
46

Построить решение - Сборка любых сборок, которые изменили файлы. Если в сборке нет изменений, она не будет перестроена. Также не будут удалены какие-либо промежуточные файлы.

Используется чаще всего.

Rebuild Solution - перестраивает все сборки независимо от изменений, но оставляет промежуточные файлы.

Используется, когда вы замечаете, что Visual Studio не включил ваши изменения в последнюю сборку. Иногда Visual Studio делает ошибки.

Чистое решение - удалить все промежуточные файлы.

Используется, когда ничего не помогает, и вам нужно все почистить и начать все заново.

Джастин Нисснер
источник
25
Чистый не делает сборку.
Джон Скит
3
@Jon Skeet - узнавать что-то новое каждый день. Я бы поклялся, что сделал перестройку. Я думаю, моя память не всегда так надежна, как хотелось бы.
Джастин Нисснер
16

Я просто думаю о Rebuild как о выполнении сначала Clean, а затем Build. Возможно, я ошибаюсь ... комментарии?

Кен Ричардс
источник
У этого не было никаких голосов (до сих пор), и согласно документам (см. Ссылку в ответе Джона), это совершенно верно.
Tod
2
Я не думаю, что это так. У меня есть ситуация, когда выполнение Чистого решения, за которым следует Build Solution, работает, но выполнить Rebuild Solution не удается. Это недавно созданное решение с двумя проектами (один зависит от другого).
Cthutu
@Cthutu Смотрите ответ Shivprasad для деталей, которые имеют значение здесь. Rebuild очищает, а затем строит каждый отдельный проект за раз, тогда как запуск Clean сначала очищает все сразу, а затем Build строит все сразу. Я сталкивался с случаями, когда это изменение в порядке очистки / сборки также делает разницу между компиляцией и не компиляцией.
Шон
@Sean Возможно, это было вызвано добавлением проекта в ваше решение file referenceвместо того, project referenceчтобы в порядке сборки проекта не распознавалось, что он должен был создать один проект раньше другого, а сборка не существовала там, где она должна была быть во время строить?
Зак
14

Построить решение - Сборка любых сборок, которые изменили файлы. Если в сборке нет изменений, она не будет перестроена. Также не будут удалены какие-либо промежуточные файлы.

Rebuild Solution очистит, а затем создаст решение с нуля, игнорируя все, что было сделано ранее.

Clean Solution удалит все скомпилированные файлы (т.е. EXE и DLL) из каталога bin / obj.

Гильерме Фиделис
источник
8

Решение Build будет строить любые проекты в решении, которые изменились. Rebuild собирает все проекты, независимо от того, что, чистое решение удаляет все временные файлы, обеспечивая завершение следующей сборки.

Стивен Эверс
источник
6

Решение для сборки - решение для сборки создаст ваше приложение с учетом количества проектов, в которых есть какие-либо изменения файла. И он не очищает существующие двоичные файлы и просто заменяет обновленные сборки в папке bin или obj.

Решение Rebuild - решение Rebuild создаст все ваше приложение с созданием всех проектов, доступных в вашем решении с их очисткой. Перед сборкой он очищает все двоичные файлы из папки bin и obj.

Чистое решение - Чистое решение просто очищает все двоичные файлы из папки bin и obj.

Sabaridass R
источник
5

Построить решение

Это будет выполнять добавочную сборку. Другими словами, он будет создавать только файлы кода, которые изменились. Если они не изменились, эти файлы не будут затронуты.

Восстановить решение

Это удалит все скомпилированные в данный момент файлы (т.е. exe и DLL) и создаст все с нуля, независимо от того, есть ли изменение кода в файле или нет.

Меню чистого решения

Это меню удалит все скомпилированные файлы (т.е. EXE и DLL) из каталога bin / obj.

Перестроить = очистить + построить

Sajisha
источник
4

Я думаю, что одна важная вещь - это то, что сборка и очистка - это задачи, которые выполняются на основе знаний Visual Studio о вашем проекте / решении. Я часто жаловался на то, что Clean не работает или оставляет оставшиеся файлы или не заслуживает доверия, хотя на самом деле причины, по которым вы говорите, что они не заслуживают доверия, на самом деле делают его более надежным.

Clean удаляет только (чистые) файлы и / или каталоги, которые фактически были созданы Visual Studio или самим компилятором. Если вы копируете свои собственные файлы или структуры файлов / папок, созданные из внешнего инструмента или источника, то Visual Studio не «знает, что они существуют» и, следовательно, не должен их трогать.

Можете ли вы представить, выполняла ли операция Clean в основном «del *. *»? Это может быть катастрофическим.

Build выполняет компиляцию измененных или необходимых проектов.

Перестройка выполняет компиляцию независимо от изменений или того, что необходимо.

Clean удаляет файлы / папки, которые он создал в прошлом, но изначально оставляет все, к чему он не имеет никакого отношения.

Я надеюсь, что это немного проработает и поможет.

гнаться
источник
4

У меня есть аа решения пустого BuildRebuildCleanи три библиотеки классов Models, Repository, Notification.

Я использую Modelsи Repositoryв Notificationбиблиотеке классов.

Затем:

  • Построение решения Инкрементная сборка и компилирование только тех файлов, которые были изменены. Если в сборке нет изменений, она не будет перестроена. Кроме того, он не будет удалять промежуточные файлы. Если изменить какой-либо код в Modelsпроекте библиотеки, то создайте решение. На приведенном ниже снимке экрана см. Временную метку DLL, обновлен EXE-файл Modelsи Notificationбиблиотека.

введите описание изображения здесь

  • Восстановление решения Удаляет все скомпилированные файлы и компилирует все независимо от изменений, игнорируя все, что было сделано ранее. Щелкните правой кнопкой мыши по названию решения BuildRebuildClean. Что он делает, так это удаляет все сборки, EXE-файлы и файлы для повторной компиляции.

введите описание изображения здесь

  • Чистое решение Удаляет все скомпилированные промежуточные файлы (например, EXE и DLL) из каталога bin / obj.

введите описание изображения здесь

Реза Дженаби
источник
2

Все, что я знаю, это то, что Clean не делает то, что обычно делал «make clean» - если я очищаю решение, я ожидаю, что оно удалит obj и bin файлы / папки, так что оно будет собираться так, как если бы это была свежая проверка исходного кода. По своему опыту, хотя я часто нахожу случаи, когда чистка и сборка или перестройка по-прежнему приводят к странным ошибкам в исходном коде, который, как известно, компилируется, а для этого требуется ручное удаление папок bin / obj, тогда он будет собираться .

Стив
источник
Специально в проектах Xamarin мне нужно вручную удалять папки bin и obj, чтобы решить странные ошибки компиляции
Miguel Febres
1

Построить решение строит только те проекты, которые изменились в решении, и не влияет на сборки, которые не изменились,

ReBuild сначала очищает все сборки из решения, а затем собирает все решение независимо от внесенных изменений.

Чисто, просто очищает раствор.

yashashwi
источник
0

Это касается только опции «Построить решение».

Я был полностью сыт по горло неспособностью Visual Studio действительно чистых решений и написал этот маленький инструмент , который сделает это для вас.

Сначала закройте свое решение в VS и перетащите его папку из Windows Explorer в это приложение или на его значок. В зависимости от настроек в нижней части окна, он также может удалить дополнительные материалы, которые помогут, если вы попытаетесь вручную загрузить свое решение в GitHub или поделиться им с кем-то еще:

введите описание изображения здесь

В двух словах, он поместит все папки «Debug», Intellisense и другие кеши, которые VS может перестроить для вас.

ahmd0
источник