Was ist der Unterschied zwischen einem Rebuild und einem Clean + Build in Visual Studio 2008? Ist Clean + Build anders als Clean + Rebuild ?
Was ist der Unterschied zwischen einem Rebuild und einem Clean + Build in Visual Studio 2008? Ist Clean + Build anders als Clean + Rebuild ?
Antworten:
Rebuild = Clean + Build (normalerweise)
Bemerkenswerte Details:
Bei einer Lösung mit mehreren Projekten führt "Lösung neu erstellen" eine "Bereinigung" durch, gefolgt von einem "Build" für jedes Projekt (möglicherweise parallel). Während eine "saubere Lösung" gefolgt von einer "Build-Lösung" zuerst alle Projekte (möglicherweise parallel) bereinigt und dann alle Projekte (möglicherweise parallel) erstellt. Dieser Unterschied in der Reihenfolge der Ereignisse kann erheblich werden, wenn Abhängigkeiten zwischen Projekten ins Spiel kommen.
Alle drei Aktionen entsprechen den MSBuild-Zielen. Ein Projekt kann also die Aktion "Neu erstellen" überschreiben, um etwas völlig anderes zu tun.
Earl hat Recht, dass 99% der Zeit Rebuild = Clean + Build.
Es ist jedoch nicht garantiert, dass sie gleich sind. Die 3 Aktionen (neu erstellen, erstellen, bereinigen) repräsentieren verschiedene MSBuild-Ziele. Jedes davon kann von einer beliebigen Projektdatei überschrieben werden, um benutzerdefinierte Aktionen auszuführen. Es ist also durchaus möglich, dass jemand die Neuerstellung überschreibt, um mehrere Aktionen auszuführen, bevor er einen Clean + Build initiiert (oder sie vollständig entfernt).
Sehr viel ein Eckfall, aber aufgrund von Kommentardiskussionen darauf hingewiesen.
Definieren wir die Standardimplementierung für die Neuerstellung in Bezug auf die Standardimplementierungen für Bereinigen und Erstellen:
Pro Projekt: Projekt neu erstellen = Projekt bereinigen + Projekt erstellen.
Pro Lösung: Erstellen Sie sln = foreach-Projekt in sln neu (Projekt bereinigen + Projekt erstellen).
Beachten Sie, dass Rebuild sln aufgrund von Unterschieden in der Ausführungsreihenfolge nicht mit (Clean sln + Build sln) = (foreach project in sln Clean project) + (foreach project in sln Build project) identisch ist. Außerdem kann dieses "foreach" gleichzeitig ausgeführt werden, sodass in beiden Szenarien unterschiedliche Aufgaben gleichzeitig ausgeführt werden können.
Angenommen, Sie haben eine SLN, die proj1, proj2 und proj3 enthält.
Neu erstellen sln = (Projekt proj1 + proj1 erstellen) & (Projekt2 reinigen + proj2 erstellen) & (Projekt3 reinigen + proj3 erstellen)
Clean Sln + Build Sln = (Clean proj1 & Clean proj2 & Clean proj3) + (Build proj1 & Build proj2 & Build proj3)
+ bedeutet seriell und bedeutet gleichzeitig.
Wenn also die Projektabhängigkeiten nicht richtig konfiguriert sind, besteht die Möglichkeit, dass beim Ausführen von Rebuild sln einige Ihrer Projekte mit einer veralteten Bibliothek verknüpft sind. Dies liegt daran, dass nicht garantiert wird, dass alle Bereinigungen abgeschlossen sind, bevor der erste Build beginnt. Wenn Sie Clean sln + Build sln ausführen, wird ein Linkfehler ausgegeben, der Sie sofort darüber informiert, anstatt Ihnen eine App mit ungewöhnlichem Verhalten zu geben.
Von http://www.cs.tufts.edu/r/graphics/resources/vs_getting_started/vs_getting_started.htm (einfach gegoogelt):
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.
Lösung erstellen oder neu erstellen erstellt oder erstellt alle Projekte in Ihrer Lösung neu, während Erstellen oder neu erstellen das StartUp-Projekt erstellt oder neu erstellt, "Hallo" im obigen Screenshot. Um das StartUp-Projekt festzulegen, klicken Sie mit der rechten Maustaste auf den gewünschten Projektnamen auf der Registerkarte Projektmappen-Explorer und wählen Sie Als StartUp-Projekt festlegen. Der Projektname wird jetzt fett angezeigt. Da die Hausaufgabenlösungen normalerweise nur ein Projekt haben, entspricht die Build- oder Rebuild-Lösung praktisch der Build- oder Rebuild-Lösung.
Kompilieren kompiliert nur die aktuell bearbeitete Quelldatei. Nützlich, um schnell nach Fehlern zu suchen, wenn sich der Rest Ihrer Quelldateien in einem unvollständigen Zustand befindet, der eine erfolgreiche Erstellung des gesamten Projekts verhindern würde. Strg-F7 ist die Tastenkombination für Kompilieren.
Aus diesem Blog-Beitrag, den der Autor als Kommentar zu dieser Frage verlinkt hat :
Nicht wirklich!!! Sie sind nicht gleich.
Der Unterschied besteht in der Reihenfolge, in der Projekte sauber werden und erstellt werden. Nehmen wir an, wir haben zwei Projekte in einer Lösung. Bereinigen und dann erstellen wird für beide Projekte bereinigt und dann wird das Erstellen einzeln ausgeführt, während beim erneuten Erstellen Projekt A abgerufen und bereinigt wird und dann erstellt wird, nachdem Projekt B sauber ist und dann erstellt wird und so weiter.