Unterschied zwischen Build Solution, Rebuild Solution und Clean Solution in Visual Studio?

Antworten:

921
  • Die Build-Lösung führt einen inkrementellen Build durch: Wenn sie nicht glaubt , dass ein Projekt neu erstellt werden muss, wird dies nicht der Fall sein . Es können auch teilweise erstellte Teile des Projekts verwendet werden, wenn sie sich nicht geändert haben (ich weiß nicht, wie weit dies dauert).
  • Die Neuerstellungslösung wird bereinigt und dann von Grund auf neu erstellt, wobei alles ignoriert wird, was zuvor getan wurde. Der Unterschied zu "Clean, gefolgt von Build" besteht darin, dass Rebuild jedes Projekt einzeln bereinigt und dann erstellt, anstatt alle zu bereinigen und dann alle zu erstellen.
  • Durch eine saubere Lösung werden die Build-Artefakte aus dem vorherigen Build entfernt. Wenn sich andere Dateien in den Build-Zielverzeichnissen (bin und obj) befinden, werden diese möglicherweise nicht entfernt, die tatsächlichen Build-Artefakte jedoch. Ich habe gesehen, dass das Verhalten dafür unterschiedlich ist - manchmal ziemlich gründlich gelöscht und manchmal nicht -, aber ich werde VS im Moment den Vorteil des Zweifels geben :)

(Die Links verweisen auf die Befehlszeilenoptionen von devenv.exe , funktionieren jedoch genauso wie die Menüelemente .)

Jon Skeet
quelle
2
@womp: Nicht in dem Projekt, das ich mir gerade angesehen habe. Es sind immer noch alle Versammlungen da ...
Jon Skeet
1
@ Jon - komisch. Ich erinnere mich nicht an eine Bereinigung, bei der diese Verzeichnisse niemals bereinigt wurden. Ich mache es gerade und es löscht alle DLL- und PDF-Dateien. Lässt meinen ReSharper-Müll auf jeden Fall in Ruhe.
Womp
156
Ich persönlich habe festgestellt, dass "Clean Solution" mehr als nicht hilfreich ist. Wenn ich es wirklich sauber haben möchte, ist das manuelle Löschen der Ordner bin und obj der richtige Weg. Ich bin sogar dabei erwischt worden, Phantom- "Fehler" zu jagen - bis ich das getan habe. Sauber ist einfach nicht zuverlässig.
Chris Rogers
7
Wenn Artefakte ihren Weg durch andere Mittel als durch Build-Artefakte gefunden haben (z. B. eine Kopie von einer anderen Quelle, die als msbuidltask im cproj integriert ist), bleiben sie sauber. Was es so ziemlich nutzlos macht, würde ich sogar sagen, dass es gefährlich ist, da es Ihnen ein falsches Gefühl der Sauberkeit hinterlässt.
Newtopian
4
@verdana: Für Github usw. ist es einfacher, eine anständige .gitignoreDatei zu haben . Aber laut Antwort macht Clean meiner Erfahrung nach nicht immer einen besonders gründlichen Job.
Jon Skeet
455

Build-Lösung: Kompiliert Code-Dateien (DLL und EXE), die geändert werden.

Neu erstellen: Löscht alle kompilierten Dateien und kompiliert sie erneut, unabhängig davon, ob sich der Code geändert hat oder nicht.

Saubere Lösung: Löscht alle kompilierten Dateien (DLL- und EXE-Datei).

Sie können dieses YouTube-Video ( Visual Studio Build vs. Rebuild vs. Clean (C # -Interview-Fragen mit Antworten) ) sehen, in dem ich die Unterschiede aufgezeigt habe. Im Folgenden sind visuelle Darstellungen aufgeführt, mit denen Sie diese detaillierter analysieren können.

Build vs Rebuild

Der Unterschied zwischen Rebuild und (Clean + Build), da auch diesbezüglich einige Verwirrung zu bestehen scheint:

Der Unterschied besteht in der Art und Weise, wie die Build- und Clean-Sequenz für jedes Projekt ausgeführt wird. Angenommen, Ihre Lösung besteht aus zwei Projekten: "proj1" und "proj2". Wenn Sie eine Neuerstellung durchführen, wird "proj1" benötigt, bereinigen (löschen) Sie die kompilierten Dateien für "proj1" und erstellen Sie sie. Danach wird das zweite Projekt "proj2" benötigt, kompilierte Dateien für "proj2" bereinigt und "proj2" kompiliert.

Wenn Sie jedoch "bereinigen" und erstellen, werden zuerst alle kompilierten Dateien für "proj1" und "proj2" gelöscht und anschließend "proj1" und anschließend "proj2" erstellt.

Vs Clean neu erstellen

Shivprasad Koirala
quelle
26
Vielen Dank, dass Sie erklärt haben, warum Rebuild nicht immer funktioniert und ich häufig bereinigen muss, bevor ich einen Build durchführe.
Didier A.
4
Ja, die Beschreibung und das zweite Diagramm waren sehr hilfreich und klar. Wenn Sie das "illegale" Flussdiagramm korrigieren könnten, sodass Ja nur an eine Stelle geht, würde dies helfen. Ich kann wirklich nicht verstehen, was dieser zu sagen versucht, besonders mit "Build ALL" unter "Rebuild".
Jon Coombs
@ JonCoombs Ja, ich glaube nicht, dass das erste Flussdiagramm genau das erfasst hat, was er im Video gesagt hat. Ich denke, das Bild, das ich eingefügt habe, ist das, was Shivprasad anstrebte.
Ruffin
Während ich dies verstehen, wenn jede Datei geändert hat, wird das Projekt in regelmäßigen Build gereinigt, dh es ist entweder nichts tun oder es wird reinigen und dann das Projekt. Ist das richtig?
Klarer
147

Aus diesem Link entnommen :

Build bedeutet, nur die Quelldateien zu kompilieren und zu verknüpfen, die sich seit dem letzten Build geändert haben, während Rebuild bedeutet, dass alle Quelldateien kompiliert und verknüpft werden, unabhängig davon, ob sie geändert wurden oder nicht. Build ist normal und schneller. Manchmal sind die Versionen der Projektzielkomponenten nicht mehr synchron und eine Neuerstellung ist erforderlich, um den Build erfolgreich zu gestalten. In der Praxis müssen Sie nie reinigen.

Matthew Jones
quelle
1
Verknüpfung? Ich dachte, die Idee einer DLL, auch bekannt als Dynamic Link Library, wäre, zur Laufzeit zu verlinken?
Der Tag
7
"In der Praxis muss man nie putzen" <- Ich rufe BS in diesem Fall an.
Piers7
2
piers7 können Sie dann einen Grund angeben, warum Sie reinigen oder neu erstellen müssten?
PaulBinder
46

Build-Lösung - Erstellt alle Assemblys, die Dateien geändert haben. Wenn eine Baugruppe keine Änderungen aufweist, wird sie nicht neu erstellt. Löscht auch keine Zwischendateien.

Am häufigsten verwendet.

Neuerstellungslösung - Erstellt alle Assemblys unabhängig von Änderungen neu, hinterlässt jedoch Zwischendateien.

Wird verwendet, wenn Sie feststellen, dass Visual Studio Ihre Änderungen nicht in die neueste Assembly übernommen hat. Manchmal macht Visual Studio Fehler.

Saubere Lösung - Löschen Sie alle Zwischendateien.

Wird verwendet, wenn alles andere fehlschlägt und Sie alles aufräumen und neu beginnen müssen.

Justin Niessner
quelle
25
Sauber macht keinen Build.
Jon Skeet
3
@ Jon Skeet - Lerne jeden Tag etwas Neues. Ich hätte geschworen, dass es einen Umbau gemacht hat. Ich denke, mein Gedächtnis ist nicht immer so zuverlässig, wie ich es gerne hätte.
Justin Niessner
16

Ich stelle mir Rebuild nur so vor, als würde zuerst das Clean ausgeführt, gefolgt vom Build. Vielleicht irre ich mich ... Kommentare?

Ken Richards
quelle
Dies hatte (bis jetzt) ​​keine positiven Stimmen und laut den Dokumenten (siehe den Link in Jons Antwort) ist dies genau richtig.
Tod
2
Ich glaube nicht. Ich habe eine Situation, in der das Ausführen einer sauberen Lösung, gefolgt von dem Erstellen einer Lösung, funktioniert, das Ausführen einer Neuerstellungslösung jedoch fehlschlägt. Dies ist eine frisch erstellte Lösung mit 2 Projekten (eines davon abhängig vom anderen).
Cthutu
@Cthutu Siehe Shivprasads Antwort für das Detail, das hier den Unterschied macht. Rebuild bereinigt und erstellt dann jedes einzelne Projekt gleichzeitig, während beim Ausführen von Clean zuerst alles auf einmal bereinigt wird und dann Build alles auf einmal erstellt. Ich bin auf Fälle gestoßen, in denen diese Änderung der Bereinigungs- / Erstellungsreihenfolge den Unterschied zwischen Kompilieren und Nichtkompilieren ausmacht.
Sean
@Sean Möglicherweise wurde dies durch das Hinzufügen eines Projekts zu Ihrer Lösung file referenceanstelle eines project referenceProjekts verursacht, sodass die Projekterstellungsreihenfolge nicht erkannte, dass ein bestimmtes Projekt vor einem anderen erstellt werden musste, und die Assembly nicht dort vorhanden war, wo sie während des Vorgangs vorhanden sein sollte bauen?
Zack
14

Build-Lösung - Erstellt alle Assemblys, die Dateien geändert haben. Wenn eine Baugruppe keine Änderungen aufweist, wird sie nicht neu erstellt. Löscht auch keine Zwischendateien.

Die Neuerstellungslösung wird bereinigt und dann von Grund auf neu erstellt, wobei alles ignoriert wird, was zuvor getan wurde

Clean Solution löscht alle kompilierten Dateien (dh EXE- und DLL-Dateien) aus dem Verzeichnis bin / obj.

Guilherme Fidelis
quelle
8

Build-Lösung erstellt alle Projekte in der Lösung, die sich geändert haben. Beim erneuten Erstellen werden alle Projekte erstellt, egal was passiert. Die saubere Lösung entfernt alle temporären Dateien, um sicherzustellen, dass der nächste Build abgeschlossen ist.

Steven Evers
quelle
6

Build-Lösung - Mit der Build-Lösung wird Ihre Anwendung erstellt, indem die Anzahl der Projekte erstellt wird, bei denen eine Datei geändert wird. Außerdem werden keine vorhandenen Binärdateien gelöscht und nur aktualisierte Assemblys im Ordner bin oder obj ersetzt.

Rebuild-Lösung - Mit der Rebuild-Lösung wird Ihre gesamte Anwendung erstellt, indem alle in Ihrer Lösung verfügbaren Projekte erstellt und bereinigt werden. Vor dem Erstellen werden alle Binärdateien aus den Ordnern bin und obj gelöscht.

Saubere Lösung - Bei der sauberen Lösung werden nur alle Binärdateien aus den Ordnern bin und obj gelöscht.

Sabaridass R.
quelle
5

Lösung erstellen

Dadurch wird ein inkrementeller Build ausgeführt. Mit anderen Worten, es werden nur Codedateien erstellt, die sich geändert haben. Wenn sie nicht geändert wurden, werden diese Dateien nicht berührt.

Lösung neu erstellen

Dadurch werden alle derzeit kompilierten Dateien (z. B. exe und DLLs) gelöscht und alles von Grund auf neu erstellt, unabhängig davon, ob sich Code in der Datei ändert oder nicht.

Lösungsmenü reinigen

In diesem Menü werden alle kompilierten Dateien (dh EXE- und DLL-Dateien) aus dem Verzeichnis bin / obj gelöscht.

Rebuild = Clean + Build

Sajisha
quelle
4

Ich denke, die Leute lassen aus, dass Build und Clean beide Aufgaben sind, die auf dem Wissen von Visual Studio über Ihr Projekt / Ihre Lösung basieren. Ich sehe viele Beschwerden darüber, dass Clean nicht funktioniert oder übrig gebliebene Dateien hinterlässt oder nicht vertrauenswürdig ist, obwohl die Gründe, aus denen Sie sagen, dass es nicht vertrauenswürdig ist, es tatsächlich vertrauenswürdiger machen.

Clean entfernt nur (saubere) Dateien und / oder Verzeichnisse, die Visual Studio oder der Compiler selbst erstellt haben. Wenn Sie Ihre eigenen Dateien kopieren oder Dateien / Ordnerstrukturen von einem externen Tool oder einer externen Quelle erstellt werden, "weiß Visual Studio nicht, dass sie vorhanden sind" und sollte sie daher nicht berühren.

Können Sie sich vorstellen, dass der Clean-Vorgang im Grunde ein "del *. *" Durchgeführt hat? Dies könnte katastrophal sein.

Build führt eine Kompilierung für geänderte oder erforderliche Projekte durch.

Rebuild führt eine Kompilierung durch, unabhängig von Änderungen oder was erforderlich ist.

Clean entfernt Dateien / Ordner, die in der Vergangenheit erstellt wurden, lässt jedoch alles übrig, mit dem es anfangs nichts zu tun hatte.

Ich hoffe das geht ein bisschen weiter und hilft.

Verfolgungsjagd
quelle
4

Ich habe aa Blindlösung BuildRebuildCleanund drei Klassenbibliothek Models, Repository, Notification.

Ich benutze Modelsund Repositoryin der NotificationKlassenbibliothek.

Dann:

  • Build-Lösung Inkrementelle Erstellung und Kompilierung nur der geänderten Dateien. Wenn eine Baugruppe keine Änderungen aufweist, wird sie nicht neu erstellt. Außerdem werden keine Zwischendateien gelöscht. Wenn Sie einen Code im ModelsBibliotheksprojekt ändern, dann BUILD-Lösung. Beziehen Sie sich im folgenden Screenshot auf den Zeitstempel der DLL, EXE wird in Modelsund NotificationBibliothek aktualisiert .

Geben Sie hier die Bildbeschreibung ein

  • Lösung neu erstellen Löscht alle kompilierten Dateien und kompiliert alle unabhängig von Änderungen, wobei alles ignoriert wird, was zuvor getan wurde. Klicken Sie mit der rechten Maustaste auf den Lösungsnamen BuildRebuildClean. Es löscht alle Assemblys, EXEs und verwiesenen Dateien, um sie erneut zu kompilieren.

Geben Sie hier die Bildbeschreibung ein

  • Clean Solution Löscht alle kompilierten Zwischendateien (dh EXEs und DLLs) aus dem Verzeichnis bin / obj.

Geben Sie hier die Bildbeschreibung ein

Reza Jenabi
quelle
2

Alles, was ich weiß, ist, dass ein Clean nicht das tut, was "make clean" früher getan hat. Wenn ich eine Lösung säubere, würde ich erwarten, dass sie obj- und bin-Dateien / -Ordner so löscht, dass sie so erstellt werden, als wäre sie ein neues Auschecken der Quelle. Nach meiner Erfahrung finde ich jedoch häufig Zeiten, in denen ein Bereinigen und Erstellen oder Wiederherstellen immer noch seltsame Fehler in der Quelle verursacht, von denen bekannt ist, dass sie kompiliert werden, und was erforderlich ist, ist ein manuelles Löschen der Ordner bin / obj, dann wird es erstellt.

Steve
quelle
Speziell in Xamarin-Projekten muss ich die Ordner bin und obj manuell löschen, um seltsame Kompilierungsfehler zu beheben
Miguel Febres
0

Dies betrifft nur die Option "Lösung erstellen".

Ich hatte die Unfähigkeit von Visual Studio satt, wirklich saubere Lösungen zu finden, und schrieb dieses kleine Tool , das dies für Sie erledigt.

Schließen Sie Ihre Lösung zuerst in VS und ziehen Sie den Ordner aus dem Windows Explorer in diese App oder in das entsprechende Symbol. Abhängig von der Einstellung am unteren Rand des Fensters können auch zusätzliche Elemente entfernt werden. Dies ist hilfreich, wenn Sie versuchen, Ihre Lösung manuell auf GitHub hochzuladen oder für andere Personen freizugeben:

Geben Sie hier die Bildbeschreibung ein

Kurz gesagt, es werden alle "Debug" -Ordner, Intellisense und andere Caches, die von VS neu erstellt werden können, in den Papierkorb für Sie abgelegt.

ahmd0
quelle