Was bewirkt der Befehl "Bereinigen" in Visual Studio?

70

Sie wissen, derjenige, der dies ausgibt =>

------ Bereinigung gestartet: Projekt: Foo.Bar, Konfiguration: Debuggen
einer beliebigen CPU ------ ========= Bereinigung: 1 erfolgreich, 0 fehlgeschlagen, 0 übersprungen ==== ======

Was ist Reinigung?

Arnis Lapsa
quelle
2
Mögliches Duplikat von Visual Studio 2005 Clean Solution
Martin Buberl
Mögliches Duplikat von Visual Studio 2005 Clean Solution
UuDdLrLrSs

Antworten:

77

Die Ausgabeverzeichnisse - entfernt den zuvor erstellten Code.

Die bin / obj-Verzeichnisse selbst (oder die darunter liegenden Debug / Release-Verzeichnisse) werden nicht entfernt, sondern nur die eigentlichen EXE-, DLL- usw. Dateien. Leider ist dies für meine übliche Verwendung beim Bereinigen von Ausgabeverzeichnissen weniger nützlich: wenn ich den Quellcode komprimieren möchte. Da die Bereinigungsaktion dies nicht tut, lösche ich normalerweise nur die Verzeichnisse bin und obj direkt.

Jon Skeet
quelle
1
Ein guter Punkt, um die Verzeichnisse nicht vollständig zu entfernen. Für mich ist das meistens umstritten, da Subversion über den Exportbefehl verfügt, der gut funktioniert (zumindest, wenn Sie die Dateien bin, obj, * .suo, * .user usw. nicht zum Repository hinzugefügt haben). Aber ja, es wäre schön, diese Funktion zu sehen.
Brian Gideon
2
Es ist interessant festzustellen, dass in VS 2013 der Befehl "Lösung bereinigen" nur die derzeit aktive Konfiguration betrifft (z. B.: Wenn Ihre Lösung auf "Debug-Konfiguration" eingestellt ist, führt Clean Solution keine Änderungen an den Dateien im Ordner "Release" durch).
Oran D. Lord
Es gibt eine Erweiterung namens CleanProject, mit der Sie eine vollständige Bereinigung durchführen können (bin, obj, ... löschen): visualstudiogallery.msdn.microsoft.com/…
Robin
Beachten Sie, dass durch den Bereinigungsvorgang keine Assemblys gelöscht werden, auf die CopyLocal auf True gesetzt ist. Sie können Ihre Projektdatei bearbeiten, um ein MSBuild-Ziel "AfterClean" hinzuzufügen, das zusätzliche Bereinigungen durchführt.
Yooy
Ich habe irgendwo gelesen, dass es nur Build-Ausgabedateien betrifft und keine Dateien enthält, die von anderen Tools oder benutzerdefinierten Build-Ereignissen erstellt wurden. Ist das korrekt?
Dercsár
30

Warum nicht selbst suchen? Öffnen Sie Microsoft.Common.Targets (unter% windir% \ Microsoft.NET) und Sie sehen einen Abschnitt wie folgt:

<!--
============================================================
                                    Clean

Delete all intermediate and final build outputs.
============================================================
-->
<PropertyGroup>
    <CleanDependsOn>
        BeforeClean;
        CleanReferencedProjects;
        UnmanagedUnregistration;
        CoreClean;
        CleanPublishFolder;
        AfterClean
    </CleanDependsOn>
</PropertyGroup>
<Target
    Name="Clean"
    Condition=" '$(_InvalidConfigurationWarning)' != 'true' "
    DependsOnTargets="$(CleanDependsOn)" />

Lesen Sie weiter, um genau zu sehen, was jedes dieser Unterziele tut. (Einige sind natürlich nur Stubs, die der Benutzer überschreiben kann).

Persönlich mag ich es zu sehen, welche Spielereien meine Fancy-Pants-IDE hinter meinem Rücken hat. Zu diesem Zweck würde ich empfehlen, die Menge der in das Ausgabefenster geschriebenen Informationen zu erhöhen. Extras -> Optionen -> Projekte und Lösungen -> Erstellen und Ausführen -> Ausführlichkeit von MSBuild -> Wechsel von "Minimal" zu "Normal" oder "Detailliert".

Versuchen Sie Ihren Reinigungsvorgang erneut und sehen Sie sich jetzt die Ausgabe an! Wenn Sie das, was Sie sehen, mit den * .targets-Dateien korrelieren, können Sie MSBuild gut lernen.

Richard Berg
quelle
15

Es durchsucht Ihre Ausgabeverzeichnisse und löscht alle Build-bezogenen Dateien in diesen.

Ich denke, Sie können dies auch konfigurieren, indem Sie zu den Projekteigenschaften in gehen

Konfigurationseigenschaften -> Allgemein unter "Beim Löschen zu löschende Erweiterungen"

Joseph
quelle
Ich bin mir ziemlich sicher, dass ich das wusste. Ich habe nur keinen guten Anwendungsfall dafür gefunden und deshalb - vergessen. Konnte nicht verstehen, wie man es richtig fragt, um zu googeln.
Arnis Lapsa
1
Ein guter Anwendungsfall dafür ist, wenn Sie Ihr Projekt komprimieren und per E-Mail an einen anderen Programmierer senden möchten. Es hält die Größe niedrig und entfernt die ausführbaren Dateien, die E-Mail-Systeme nicht sehr mögen.
Rbwhitaker
"Beim Löschen zu löschende Erweiterungen" wird nur in C ++ - Projekteigenschaften gefunden, nicht in verwalteten Projekten.
Adam Caviness
4

Entfernt alle Dateien, die den Build- und Ausgabeverzeichnissen zugeordnet sind

vehomzzz
quelle
4

Die Leute verwenden ein "sauber", um einen vollständigen Wiederaufbau von der Quelle zu erzwingen. Ihr Compiler erstellt nicht jedes Mal jede Datei neu, wenn sie sich nicht geändert hat.

Adam Casey
quelle
3
Erstens, um dies zu verdeutlichen, macht eine Reinigung kein Gebäude. Eine Bereinigung stellt einen vollständigen Build sicher, wenn Sie einen nachfolgenden Build mit der Option 'build' in VS ausführen. Wenn Sie in Visual Studio 'neu erstellen', wird alles neu erstellt, da dies ohnehin zuerst bereinigt wird. Ich persönlich baue immer wieder um, um mögliche Probleme zu vermeiden.
Chris Halcrow
1
Dies sollte als Antwort akzeptiert werden, da es den tatsächlichen Grund dafür angibt
Blue Print