Яка різниця між простою перебудовою та виконанням програми Clean + Build у Visual Studio 2008? Чи є Clean + Build іншим, ніж робити Clean + Rebuild ?
Яка різниця між простою перебудовою та виконанням програми Clean + Build у Visual Studio 2008? Чи є Clean + Build іншим, ніж робити Clean + Rebuild ?
Відповіді:
Перебудувати = очистити + скласти (зазвичай)
Помітні деталі:
Для багатопроектного рішення "відновити рішення" робить "чистим" з подальшим "складанням" для кожного проекту (можливо, паралельно). Тоді як "чисте рішення" з подальшим "рішенням для збирання" спочатку очищає всі проекти (можливо, паралельно), а потім будує всі проекти (можливо, паралельно). Ця різниця в послідовності подій може набути значного значення, коли вступлять міжпроектні залежності.
Усі три дії відповідають цілям MSBuild. Таким чином, проект може змінити дію Rebuild, щоб зробити щось зовсім інше.
Граф правильний, що 99% часу відбудовувати = очищати + будувати.
Але вони гарантовано не будуть однаковими. 3 дії (відновити, побудувати, очистити) представляють різні цілі MSBuild. Кожен з яких може бути замінений будь-яким файлом проекту для виконання спеціальних дій. Тож цілком можливо, щоб хтось змінив перебудову, щоб зробити кілька дій, перш ніж ініціювати чисту + збірку (або видалити їх повністю).
Дуже сильний кутовий випадок, але вказуючи на це через обговорення коментарів.
Давайте визначимо реалізацію за замовчуванням реалізацію з точки зору реалізації за замовчуванням Clean and Build:
За проект: Перебудувати проект = Очистити проект + Створити проект.
За рішенням: Перебудувати sln = проект foreach у sln (Очистити проект + збірний проект).
Зауважте, що через відмінності в порядку виконання, відновити sln не є тим самим, як (Clean sln + Build sln) = (проект foreach у sln Очистити проект) + (проект foreach у sln проект збірки). Крім того, цей "foreach" може виконуватись одночасно, тому в двох сценаріях дозволено виконувати різні завдання.
Скажімо, у вас є sln, який містить proj1, proj2 та proj3.
Перебудувати sln = (Очистити proj1 + Створити proj1) & (Очистити proj2 + Створити proj2) & (Очистити proj3 + Створити proj3)
Clean Sln + Build Sln = (Очистити proj1 & Clean proj2 & Clean proj3) + (Build 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, "привіт" на екрані, знятому вище. Щоб встановити проект StartUp, клацніть правою кнопкою миші на потрібному імені проекту на вкладці Провідник рішень та виберіть Встановити як проект запуску. Назва проекту тепер з’являється жирним шрифтом. Оскільки рішення для домашніх завдань, як правило, мають лише один проект, рішення Build або Rebuild фактично таке ж, як Build або Rebuild.
Compile просто компілює вихідний файл, який зараз редагується. Корисно швидко перевірити наявність помилок, коли решта ваших вихідних файлів знаходяться в неповному стані, що заважало б успішному побудові всього проекту. Ctrl-F7 - це клавіша швидкого доступу для Compile.
З цієї публікації в блозі, яку автор пов’язував як коментар до цього питання :
Насправді ні !!! вони не рівні.
Різниця в тому, що послідовність проектів очищається та будується. Скажімо, у нас є два проекти у вирішенні. Очистити, а потім скласти буде виконувати чисто для обох проектів, а потім збирання відбуватиметься індивідуально, тоді як під час відновлення проект A буде отримувати та очищати, а потім будувати після цього проект B буде чистим, а потім будувати і так далі.