Різниця між збірним рішенням, перебудовою рішенням та чистим рішенням у Visual Studio?


1136

Яка різниця між Build Solution, Rebuild Solution та Clean Solution у Visual Studio?

Коли настає відповідний час для використання кожного з них?


3
Також дивіться stackoverflow.com/questions/1247457/…
Грег,


2
Чи відбудова така ж, як чиста, а потім побудова?
Полковник Паніка

@ColonelPanic так
Алан Біртлз

Відповіді:


921
  • Рішення збирання буде виконувати поступовий збір: якщо він не вважає, що потрібно відновлювати проект, він не стане. Він також може використовувати частково вбудовані біти проекту, якщо вони не змінилися (я не знаю, наскільки це займає)
  • Відновлення рішення очистить, а потім створить рішення з нуля, ігноруючи все, що було зроблено раніше. Різниця між цим та "Очистити, за яким слід збільшити" полягає в тому, що Rebuild очистить, а потім створить кожен проект по одному, а не очистить все, а потім все створить.
  • Чисте рішення видалить артефакти збірки з попередньої збірки. Якщо в каталогах збирання є будь-які інші файли (bin та obj), вони можуть бути видалені, але фактичні артефакти збірки є. Я бачив, як поведінка для цього різниться - іноді видаляю досить ретельно, а іноді - ні, але на даний момент я дам VS користь від сумнівів :)

(Посилання є на перемикачі командного рядка devenv.exe , але вони роблять те саме, що і в пунктах меню.)


2
@womp: Не в проекті, який я щойно переглядав. Тут все ще є всі збори ...
Джон Скіт

1
@Jon - дивно. Я не пригадую, щоб чистий ніколи не прибирав ці каталоги. Я роблю це прямо зараз, і він витирає всі .dll та .pdb файли. Однозначно залишає моє сміття ReSharper у спокої.
утроба

156
Я особисто вважав, що "Чистий розчин" є більш ніж корисним. Якщо я дійсно хочу, щоб це було чистим, вручну видалити папки bin та obj - це шлях. Навіть мене зловили, переслідуючи фантомні "помилки" - поки я цього не зробив. Чистий просто не є надійним.
Кріс Роджерс

7
якщо артефакти пробилися іншими способами, ніж через побудову артефактів (скажімо, наприклад, копію з іншого джерела, інтегрованого як msbuidltask у cproj), то чисті залишають їх. Що робить його набагато марним, я б навіть сказав, що це небезпечно, оскільки залишить у вас помилкове почуття чистоти.
Ньютопський

4
@verdana: Для github тощо простіше мати гідний .gitignoreфайл. Але відповідно до відповіді, Clean не завжди робить особливо ретельну роботу з мого досвіду.
Джон Скіт

455

Рішення побудови: компілює файли коду (DLL та EXE), які змінюються.

Перебудувати: Видаляє всі компільовані файли та збирає їх знову незалежно від того, змінився чи ні.

Чисте рішення: Видаляє всі компільовані файли (файл DLL та EXE).

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

Побудувати проти відновити

Різниця між Rebuild vs. (Clean + Build), оскільки навколо цього також існує певна плутанина:

Різниця полягає в тому, як відбувається послідовність складання та очищення для кожного проекту. Скажімо, ваше рішення має два проекти: "proj1" і "proj2". Якщо ви перестраюєтеся, це знадобиться "proj1", очистіть (видаліть) скомпільовані файли для "proj1" і складіть його. Після цього візьметься другий проект "proj2", очистіть компільовані файли для "proj2" і компілюйте "proj2".

Але якщо ви зробите «чистий» і побудуєте, він спершу видалить усі складені файли для «proj1» та «proj2», а потім створить «proj1» спочатку за «proj2».

Відновіть Vs Clean


26
Дякую, що пояснили, чому відбудова не завжди працює, і мені часто потрібно чистити, перш ніж будувати.
Дідьє А.

4
Так, опис та друга діаграма були дуже корисними та зрозумілими. Якщо ви зможете виправити "незаконну" блок-схему, так що "Так" перейде лише на одне місце, це допоможе. Я дійсно не можу зрозуміти, що намагається сказати, особливо із "Побудувати ВСЕ" під "Перебудувати".
Джон Кумбс

@JonCoombs Так, я не думаю, що перша блок-схема відзняла саме те, що він сказав на відео. Я думаю, що вставлене нами зображення - це те, на що прагнув Шивпрасад.
ruffin

Як я розумію це, якщо будь-який файл змінився, проект буде очищено під час регулярної збірки, тобто він нічого не зробить, або очистить, а потім створить проект. Це правильно?
Ясніше

147

З цього посилання :

Збірка означає компілювати та зв’язувати лише вихідні файли, які були змінені з моменту останньої збірки, тоді як Перебудувати означає компілювати та зв’язувати всі вихідні файли незалежно від того, змінилися вони чи ні. Збірка - це нормальна річ і швидша. Іноді версії цільових компонентів проекту можуть вийти із синхронізації та відновитись, щоб зробити збірку вдалою. На практиці ніколи не потрібно чистити.



1
Посилання? Я думав, що ідея DLL, яка називається динамічною бібліотекою посилань, полягала в тому, щоб зв’язатись під час виконання?
Даг

7
"На практиці вам ніколи не потрібно чистити" <- я закликаю BS на цьому.
пристань7,

2
piers7 Ви можете тоді навести причину, яку вам потрібно буде прибрати проти відновлення?
PaulBinder


46

Build Solution - будує будь-які збірки, які змінили файли. Якщо збірка не має змін, вона не буде відтворена. Також не буде видалено жодні проміжні файли.

Використовується найчастіше.

Рішення відновлення - відновлює всі збори незалежно від змін, але залишає проміжні файли.

Використовується, коли ви помічаєте, що Visual Studio не включив ваші зміни в останню збірку. Іноді Visual Studio робить помилки.

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

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


25
Очищення не робить складання.
Джон Скіт

3
@Jon Skeet - щодня дізнайтеся щось нове. Я б поклявся, що це відбудується. Я думаю, що моя пам’ять не завжди є такою надійною, як хотілося б.
Джастін Нісснер

16

Я просто думаю про Перебудову як виконання "Чистого", а за ним - "Збірка". Можливо, я помиляюся ... коментарі?


Це не було оновлень (до цих пір), і згідно з документами (див. Посилання у відповіді Йона), це абсолютно правильно.
Тод

2
Я не думаю, що це робить. У мене ситуація, коли робити «Чисте рішення», за яким працює «Збірка рішення», але зробити «Відновити рішення» не вдається. Це щодо щойно створеного рішення з 2-ма проектами (один залежний від іншого).
Cthutu

@Cthutu Дивіться відповідь Shivprasad про деталі, які мають значення тут. Поновлення очищає, а потім створює кожен окремий проект за один раз, тоді як запущений Clean спочатку очищає все одразу, потім Build збирає все це відразу. Я натрапив на випадки, коли ця зміна порядку чищення / складання також відрізняє компіляцію та некомпіляцію.
Шон

@Sean Можливо, це було викликано додаванням проекту у ваше рішення як file referenceзамість того, project referenceщоб замовлення на створення проекту не визнало, що він повинен будувати певний проект перед іншим, і збірка не існувала там, де вона мала бути під час будувати?
Зак

14

Build Solution - будує будь-які збірки, які змінили файли. Якщо збірка не має змін, вона не буде відтворена. Також не буде видалено жодні проміжні файли.

Відновлення рішення очистить, а потім створить рішення з нуля, ігноруючи все, що було зроблено раніше

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


8

Рішення побудови дозволить будувати будь-які проекти, що змінилися. Відновлення будує всі проекти незалежно від того, чисте рішення видаляє всі тимчасові файли, забезпечуючи завершення наступної збірки.


6

Build Solution - Рішення Build створить вашу програму, будуючи кількість проектів, які мають будь-які зміни файлів. І це не очищає жодних існуючих бінарних файлів і просто замінює оновлені збірки в папці bin або obj.

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

Чисте рішення - Чисте рішення просто очищає всі бінарні файли з папки bin та obj.


5

Будувати рішення

Це дозволить наростити нарощування. Іншими словами, він буде створювати лише файли коду, які змінилися. Якщо вони не змінили, ці файли не торкаються.

Відновити рішення

Це видалить усі поточно складені файли (тобто EXE та DLL) і створить все з нуля, незалежно від того, чи є у файлі зміна коду чи ні.

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

Це меню видалить усі компільовані файли (тобто EXE та DLL) з каталогу bin / obj.

Перебудувати = очистити + побудувати


4

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

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

Ви можете собі уявити, якщо операція Clean в основному виконувала "del *. *"? Це може бути катастрофічно.

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

Перебудова виконує компіляцію незалежно від зміни або необхідного.

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

Я сподіваюся, що це трохи детальніше і допомагає.


4

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

Я використовую Modelsі Repositoryв Notificationбібліотеці класів.

Тоді:

  • Рішення побудови Поступова збірка та компілювання лише тих файлів, які змінені. Якщо збірка не має змін, вона не буде відтворена. Також проміжні файли не видалять. Якщо Змінити якийсь код у Modelsпроекті бібліотеки, то BUILD рішення. У скріншоті нижче, відносяться до мітки часу DLL, EXE оновлюється в Modelsі Notificationбібліотека.

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

  • Рішення відновлення Видаляє всі компільовані файли та збирає всі незалежно від змін, ігноруючи все, що було зроблено раніше. Клацніть правою кнопкою миші назву рішення BuildRebuildClean. Що він робить - це видалити всі збірки, EXE та передані файли для компіляції заново.

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

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

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


2

Все, що я знаю, є «Чистота» - не робить те, що «очищати» раніше, - якщо я очищую рішення, я б очікував, що він видалить obj і bin файли / папки, щоб вони створювались, як це була нова перевірка джерела. На моєму досвіді, хоча я часто знаходжу випадки, коли Clean and Build або Rebuild все ще створює дивні помилки у джерелі, який, як відомо, збирається, і що потрібно - це ручне видалення папок bin / obj, тоді воно буде створене.


Спеціально для проектів Xamarin мені потрібно видалити папки бін та obj вручну, щоб вирішити дивні помилки компіляції
Мігель

1

Рішення збирання будує лише ті проекти, які змінилися в рішенні, і не впливають на збірки, які не змінилися,

Спочатку ReBuild очищає всі збори від рішення, а потім будує ціле рішення незалежно від зроблених змін.

Чистий, просто очищає розчин.



0

Це стосується лише опції "Build Solution".

Мене цілком надокучила нездатність Visual Studio дійсно чистих рішень і написала цей маленький інструмент, який зробить це за вас.

Спершу закрийте своє рішення у VS та перетягніть його папку з Провідника Windows у цю програму чи у її значок. Залежно від налаштування в нижній частині вікна, він також може видалити додаткові матеріали, що допоможе, якщо ви спробуєте вручну завантажити рішення в GitHub або поділитися ним з кимось іншим:

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

У двох словах, вони розмістять усі папки "Налагодження", Intellisense та інші кеші, які VS може перебудувати у кошик для вас.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.