Visual Studioでのソリューションのビルド、ソリューションのリビルド、ソリューションのクリーンの違いは?


1137

Visual Studioでのソリューションのビルド、ソリューションのリビルド、およびソリューションのクリーンの違いは何ですか?

これらのそれぞれを使用する適切な時期はいつですか?


3
Greg


2
再構築は、クリーンでビルドと同じですか?
大佐パニック

@ColonelPanicはい
アランBirtles

回答:


921
  • ビルドソリューションは、インクリメンタルビルドを実行します。プロジェクトを再ビルドする必要があると思わない場合は、必要ありません。変更されていない場合は、プロジェクトの部分的にビルドされたビットを使用することもあります(これにどれだけの時間がかかるかわかりません)
  • ソリューション再構築すると、ソリューションがクリーンアップされ、最初からソリューションが構築され、以前に行われたことはすべて無視されます。これと「クリーン、その後にビルド」の違いは、Rebuildがすべてのプロジェクトをクリーンアップしてからビルドするのではなく、一度に1つずつクリーンアップしてからビルドすることです。
  • クリーンソリューションは、以前のビルドからビルドアーティファクトを削除します。ビルドターゲットディレクトリ(binおよびobj)に他のファイルがある場合、それらは削除されない場合がありますが、実際のビルドアーティファクトは削除されます。私はこれの動作が変化するのを見てきました-時々かなり完全に削除することもしないこともあります-しかし、私はVSに今のところ疑いの利益を与えるつもりです:)

(リンクはdevenv.exeコマンドラインスイッチへのリンクですが、メニュー項目と同じです。)


2
@womp:私が今見ているプロジェクトではありません。まだすべてのアセンブリが残っています...
Jon Skeet

1
@ジョン-変。これらのディレクトリをクリーンアップしないクリーンを思い出したことはありません。私は今それをやっていて、すべての.dllファイルと.pdbファイルをワイプしています。間違いなく私のReSharperジャンクはそのままにしておきます。
2010年

156
私は個人的に「クリーンソリューション」が役に立たない以上のものであることがわかりました。本当にクリーンにしたい場合は、手動でbinおよびobjフォルダーを削除する方法です。私がそれをするまで、幻影の「エラー」を追いかけて捕らえられさえしました。クリーンは信頼できません。
Chris Rogers、

7
アーティファクトがビルドアーティファクト以外の方法で作成された場合(たとえば、cprojにmsbuidltaskとして統合された別のソースからのコピーなど)、クリーンのままにします。それはそれをほとんど役に立たなくします、それはあなたに清潔感の誤った感覚を残すのでそれは危険だとさえ言います。
ニュートピア2012

4
@verdana:githubなどの場合、適切な.gitignoreファイルを作成する方が簡単です。しかし、答えによれば、Cleanは私の経験において必ずしも完全な仕事をするわけではありません。
Jon Skeet、2015

455

ビルドソリューション:変更されたコードファイル(DLLおよびEXE)をコンパイルします。

再構築:コードが変更されたかどうかに関係なく、すべてのコンパイル済みファイルを削除し、それらを再度コンパイルします。

クリーンソリューション:すべてのコンパイル済みファイル(DLLおよびEXEファイル)を削除します。

このYouTubeビデオ(Visual Studio Build vs. Rebuild vs. Clean(C#インタビューの質問と回答))を見ることができます。違いを示しました。以下は、同じことをより詳細に分析するのに役立つ視覚的な表現です。

ビルドと再ビルド

Rebuildと(Clean + Build)の違い。これについても混乱があるようです。

違いは、すべてのプロジェクトでビルドおよびクリーンシーケンスが行われる方法です。ソリューションに「proj1」と「proj2」の2つのプロジェクトがあるとします。再構築を行う場合は、「proj1」が必要です。「proj1」のコンパイル済みファイルをクリーンアップ(削除)して、ビルドします。その後、2番目のプロジェクト「proj2」を取得し、「proj2」のコンパイル済みファイルをクリーンアップして、「proj2」をコンパイルします。

ただし、「クリーン」でビルドすると、まず「proj1」と「proj2」のコンパイル済みファイルがすべて削除され、次に「proj1」が最初にビルドされ、次に「proj2」がビルドされます。

クリーン対再構築


26
Rebuildが常に機能しない理由を説明していただきありがとうございます。ビルドを実行する前にクリーンアップが必要になることがよくあります。
Didier A.

4
はい、説明と2番目の図は非常に役に立ち、明確でした。「違法な」フローチャートを修正して、「はい」が1か所にしか行かないようにすることができれば、それは役立ちます。特に「再構築」の下の「すべてを構築」では、そのことを言っているのが本当にわかりません。
Jon Coombs 2016

@JonCoombsええ、私は最初のフローチャートが彼がビデオで言ったことを正確に捕らえたとは思いません。私が考えて、私が挿入した画像がShivprasadを狙ったものです。
ruffin

これを理解しているようにファイルが変更された場合、プロジェクトは通常のビルドでクリーンアップされます。つまり、何も実行されないか、クリーンアップされてプロジェクトがビルドされます。これは正しいです?
2018年

147

このリンクから取得:

ビルドとは、前回のビルド以降に変更されたソースファイルのみをコンパイルしてリンクすることを意味し、リビルドとは、変更されたかどうかに関係なく、すべてのソースファイルをコンパイルしてリンクすることを意味します。ビルドは通常行うことであり、高速です。場合によっては、プロジェクトのターゲットコンポーネントのバージョンが同期しなくなり、ビルドを成功させるために再ビルドが必要になります。実際には、掃除する必要はありません。



1
リンク?DLL、つまりダイナミックリンクライブラリのアイデアは、実行時にリンクすることだと思いましたか?
ダグ2014年

7
「実際にはあなたが掃除する必要は決してない」<-私はこれでBSを呼ぶ。
piers7 2016

2
piers7では、クリーンアップと再構築が必要な理由を教えていただけますか?
PaulBinder 2016年


46

ビルドソリューション -ファイルが変更されたアセンブリをビルドします。アセンブリに変更がない場合、アセンブリは再構築されません。また、中間ファイルは削除されません。

最も一般的に使用されます。

ソリューションの再構築 -変更に関係なくすべてのアセンブリを再構築しますが、中間ファイルは残します。

Visual Studioが変更を最新のアセンブリに組み込んでいないことに気付いたときに使用されます。ときどきVisual Studioは間違いを犯します。

クリーンソリューション -すべての中間ファイルを削除します。

他のすべてが失敗し、すべてをクリーンアップして最初からやり直す必要がある場合に使用されます。


25
Cleanはビルドを行いません。
Jon Skeet

3
@ジョンスキート-毎日何か新しいことを学びましょう。私はそれが再建をしたと誓ったでしょう。私の記憶はいつも思っているほど信頼できるとは限りません。
Justin Niessner、2010年

16

Rebuildは、最初にCleanを実行し、次にBuildを実行するものと考えています。たぶん私は間違っている...コメント?


これには(今まで)賛成票はありませんでした。ドキュメントによれば(Jonの回答のリンクを参照)、これはまさに正しいことです。
Tod

2
そうは思いません。Clean Solutionを実行してからBuild Solutionが機能するが、Rebuild Solutionを実行できないという状況があります。これは、2つのプロジェクト(一方が他方に依存する)で新しく作成されたソリューションに関するものです。
クトゥツ2013年

@Cthutuここで違いをもたらす詳細については、Shivprasadの回答を参照してください。Rebuildは一度に個々のプロジェクトをクリーンアップしてからビルドしますが、Cleanを実行するとすべてが一度にクリーンアップされ、次にBuildが一度にすべてをビルドします。私は、クリーン/ビルドの順序のこの変更により、コンパイルする場合とコンパイルしない場合とで違いが出てくる場合にも遭遇しました。
ショーン・

@Sean多分それはあなたのソリューションにプロジェクトをのfile reference代わりに追加することによって引き起こされたproject referenceので、プロジェクトのビルド順序は特定のプロジェクトを別のプロジェクトの前にビルドする必要があることを認識せず、アセンブリはその間に存在するはずの場所に存在しませんでしたビルド?
Zack

14

ビルドソリューション –ファイルを変更したアセンブリをビルドします。アセンブリに変更がない場合、アセンブリは再構築されません。また、中間ファイルは削除されません。

ソリューション再構築すると、ソリューションがクリーンアップされてからゼロから構築され、以前に行われたことはすべて無視されます

Clean Solutionは、bin / objディレクトリからすべてのコンパイル済みファイル(つまり、EXEとDLL)を削除します。


8

ソリューションのビルドは、変更されたソリューション内のプロジェクトをビルドします。Rebuildはすべてのプロジェクトをビルドしますが、クリーンソリューションはすべての一時ファイルを削除して、次のビルドが確実に完了するようにします。


6

ビルドソリューション -ビルドソリューションは、ファイルが変更されているプロジェクトの数をビルドして、アプリケーションをビルドします。また、既存のバイナリファイルは消去されず、binまたはobjフォルダー内の更新されたアセンブリが置き換えられるだけです。

ソリューションの再構築 - ソリューションの再構築は、アプリケーション全体をビルドし、すべてのプロジェクトをビルドして、ソリューションで使用可能なすべてのプロジェクトをクリーンアップします。ビルドする前に、binおよびobjフォルダーからすべてのバイナリファイルをクリアします。

クリーンソリューション -クリーンソリューションは、binおよびobjフォルダーからすべてのバイナリファイルをクリアするだけです。


5

ソリューションを構築する

これにより、増分ビルドが実行されます。つまり、変更されたコードファイルのみがビルドされます。それらが変更されていない場合、これらのファイルは変更されません。

ソリューションを再構築

これにより、現在コンパイルされているすべてのファイル(つまり、exeとDLL)が削除され、ファイルにコード変更があるかどうかに関係なく、すべてが最初からビルドされます。

クリーンソリューションメニュー

このメニューは、bin / objディレクトリからすべてのコンパイル済みファイル(EXEおよびDLL)を削除します。

再構築=クリーン+ビルド


4

人々が除外していると私が思う1つの主要なことは、ビルドとクリーンアップはどちらも、プロジェクト/ソリューションに関するVisual Studioの知識に基づいて実行されるタスクであることです。Cleanが機能しない、残されたファイルを残す、または信頼できないという不満がたくさんあります。実際、信頼できないと言う理由により、実際には信頼できるようになります。

Cleanは、Visual Studioまたはコンパイラ自体が実際に作成したファイルやディレクトリのみを削除します。独自のファイルをコピーする場合、またはファイル/フォルダー構造が外部のツールまたはソースから作成される場合、Visual Studioは「それらが存在することを認識」していないため、それらに触れるべきではありません。

Cleanオペレーションが基本的に「del *。*」を実行したと想像できますか?これは壊滅的となる可能性があります。

ビルドは、変更されたプロジェクトまたは必要なプロジェクトでコンパイルを実行します。

Rebuildは、変更や必要なものに関係なくコンパイルを実行します。

Cleanは、過去に作成したファイル/フォルダーを削除しますが、最初は関係のないものはすべて残します。

私はこれが少し精巧になり、助けてくれることを願っています。


4

私は、AAブランク溶液持っているBuildRebuildCleanと3クラスライブラリをModelsRepositoryNotification

クラスライブラリで使用ModelsRepositoryていNotificationます。

次に:

  • ビルドソリューションインクリメンタルビルドし、変更されたファイルのみをコンパイルします。アセンブリに変更がない場合、アセンブリは再構築されません。また、中間ファイルは削除されません。Modelsライブラリプロジェクトの一部のコードを変更する場合は、ソリューションを構築します。以下のスクリーンショットでは、DLLのタイムスタンプを参照して、EXEがで更新されるModelsNotificationライブラリ。

ここに画像の説明を入力してください

  • ソリューションの再構築コンパイルされたすべてのファイルを削除し、変更に関係なくすべてコンパイルします。以前に行われたことは無視されます。ソリューション名を右クリックしますBuildRebuildClean。これは、すべてのアセンブリ、EXE、および参照ファイルを削除して、再度コンパイルすることです。

ここに画像の説明を入力してください

  • Clean Solution bin / objディレクトリからすべてのコンパイル済みの中間ファイル(EXEおよびDLL)を削除します。

ここに画像の説明を入力してください


2

私が知っているのは、Cleanが "make clean"を実行していないことだけです。ソリューションをCleanすると、objとbinファイル/フォルダーが削除され、ビルドがソースの新しいチェックアウトのようになると予想されます。私の経験では、クリーンアンドビルドまたは再ビルドがコンパイル時に既知のソースで奇妙なエラーを生成することがよくありますが、必要なのはbin / objフォルダーを手動で削除することですが、ビルドされます。


特にXamarinプロジェクトでは、奇妙なコンパイルエラーを解決するために手動でbinおよびobjフォルダーを削除する必要があります
Miguel Febres

1

ソリューションのビルドは、ソリューションで変更されたプロジェクトのみをビルドし、変更されていないアセンブリには影響しません。

ReBuildは、最初にソリューションからすべてのアセンブリをクリーンアップし、行われた変更に関係なくソリューション全体をビルドします。

クリーン、単にソリューションをクリーンアップします。



0

これは「ソリューションのビルド」オプションのみに関するものです。

Visual Studioではソリューションを本当にクリーンアップできないことに完全にうんざりしていて、それを実行するこの小さなツールを作成しました。

まずVSでソリューションを閉じ、そのフォルダーをWindowsエクスプローラーからこのアプリまたはアイコンにドラッグします。ウィンドウ下部の設定に応じて、追加のものを削除することもできます。これは、ソリューションをGitHubに手動でアップロードしたり、他の人と共有したりする場合に役立ちます。

ここに画像の説明を入力してください

簡単に言うと、VSによってごみ箱に再構築できるすべての「デバッグ」フォルダー、Intellisense、およびその他のキャッシュが配置されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.