Ich arbeite mit mehreren Projekten und möchte alle Ordner mit dem Namen 'bin' oder 'obj' rekursiv löschen. Auf diese Weise bin ich sicher, dass alle Projekte alles neu erstellen (manchmal ist dies die einzige Möglichkeit, Visual Studio zu zwingen, alle vorherigen zu vergessen baut).
Gibt es eine schnelle Möglichkeit, dies zu erreichen (z. B. mit einer .bat-Datei), ohne ein .NET-Programm schreiben zu müssen?
visual-studio
visual-studio-2008
batch-file
cmd
MichaelD
quelle
quelle
Antworten:
Dies hängt von der Shell ab, die Sie bevorzugen.
Wenn Sie die Cmd-Shell unter Windows verwenden, sollte Folgendes funktionieren:
Wenn Sie eine Shell vom Typ bash oder zsh verwenden (z. B. git bash oder babun unter Windows oder den meisten Linux / OS X-Shells), ist dies eine viel schönere und prägnantere Methode, um das zu tun, was Sie wollen:
und dies kann mit einem ODER auf eine Zeile reduziert werden:
Beachten Sie, dass find Ihre Einträge unverändert sendet, wenn Ihre Dateinamenverzeichnisse Leerzeichen oder Anführungszeichen enthalten. Xargs kann in mehrere Einträge aufgeteilt werden. Wenn Ihre Shell sie unterstützt
-print0
und-0
dieses Manko umgeht, werden die obigen Beispiele wie folgt:und:
Wenn Sie Powershell verwenden, können Sie Folgendes verwenden:
Wie in der Antwort von Robert H unten zu sehen - stellen Sie sicher, dass Sie ihm die Powershell-Antwort und nicht mir zuschreiben, wenn Sie sich dafür entscheiden, etwas zu verbessern :)
Es wäre natürlich ratsam, jeden Befehl, den Sie auswählen, zuerst an einem sicheren Ort auszuführen, um ihn zu testen!
quelle
Ich habe diesen Thread gefunden und Bingo bekommen. Ein bisschen mehr Suchen ergab dieses Power-Shell-Skript:
Ich dachte, ich würde teilen, wenn man bedenkt, dass ich die Antwort nicht gefunden habe, als ich hier gesucht habe.
quelle
gci -include bin,obj -recurse | remove-item -force -recurse
) zu leiten-WhatIf
Flagge zuerst getestet wird, also kam ich zu folgendem$foldersToRemove='bin','obj';[string[]]$foldersToIgnore='ThirdParty';Get-ChildItem .\ -Include $foldersToRemove -Recurse|Where-Object{$_.FullName -inotmatch "\\$($foldersToIgnore -join '|')\\"}|Remove-Item -Force -Recurse -WhatIf
Das hat bei mir funktioniert:
Basierend auf dieser Antwort auf superuser.com
quelle
Ich füge meinen Lösungen immer ein neues Ziel hinzu, um dies zu erreichen.
Und Sie können es von der Kommandozeile aus aufrufen
Dies kann Ihre Batch-Datei sein.
quelle
Ich habe dazu ein Powershell-Skript geschrieben .
Der Vorteil besteht darin, dass eine Zusammenfassung der gelöschten und ignorierten Ordner gedruckt wird, wenn Sie eine Unterordnerhierarchie angegeben haben, die ignoriert werden soll.
quelle
$_ -notmatch 'node_modules'
Bedingung zur$FoldersToRemove
Variablendefinition hinzufügenBei mir hat nichts funktioniert. Ich musste alle Dateien in den Ordnern bin und obj löschen, um sie zu debuggen und freizugeben. Meine Lösung:
1. Klicken Sie mit der rechten Maustaste auf Projekt, entladen Sie, klicken Sie erneut mit der rechten Maustaste auf Bearbeiten und gehen Sie nach unten
2. Einfügen
3. Speichern Sie das Projekt, laden Sie es erneut, klicken Sie mit der rechten Maustaste auf Clean und Presto.
quelle
So etwas sollte es nach einem sauberen Ziel auf ziemlich elegante Weise tun:
quelle
So löschen Sie bin und obj vor dem Erstellen zur Projektdatei:
Hier ist der Artikel: So entfernen Sie den Ordner bin und / oder obj vor dem Erstellen oder Bereitstellen
quelle
Sehr ähnlich zu Steves PowerShell-Skripten. Ich habe gerade TestResults und Pakete hinzugefügt, da dies für die meisten Projekte erforderlich ist.
quelle
Schauen Sie sich das CleanProject an , es löscht Bin-Ordner, Obj-Ordner, TestResults-Ordner und Resharper-Ordner. Der Quellcode ist ebenfalls verfügbar.
quelle
von Verwenden von Windows PowerShell zum Entfernen von obj-, bin- und ReSharper-Ordnern
sehr ähnlich zu Robert H Antwort mit kürzerer Syntax
Einfügen und unter Skript ausführen
dir. \ -include bin, obj, resharper * -recurse | foreach ($ ) {rd $ _. fullname –Recurse –Force}
quelle
Eine sehr schnelle und schmerzlose Möglichkeit besteht darin, das
rimraf
Dienstprogramm npm zu verwenden und es zuerst global zu installieren:Und dann ist der Befehl von Ihrem Projektstamm ganz einfach (der in einer Skriptdatei gespeichert werden kann):
Um den gewünschten Effekt zu optimieren, können Sie die Projektereignisziele (die Sie verwenden können
BeforeRebuild
, um den vorherigen Befehl auszuführen) nutzen, die in den Dokumenten angegeben sind: https://docs.microsoft.com/en-us/visualstudio/ msbuild / How-to-Extend-the-Visual-Studio-Build-Prozess? view = vs-2017Ich mag das Rimraf-Dienstprogramm, da es plattformübergreifend und sehr schnell ist. Sie können den
RemoveDir
Befehl jedoch auch in der .csproj-Datei verwenden, wenn Sie sich für die Zielereignisoption entscheiden. DerRemoveDir
Ansatz wurde in einer anderen Antwort von @Shaman gut erklärt: https://stackoverflow.com/a/22306653/1534753quelle
Hier ist die Antwort ich auf eine ähnliche Frage gegeben habe: Einfach, einfach, funktioniert ziemlich gut und erfordert nichts anderes als das, was Sie bereits mit Visual Studio haben.
Da andere bereits geantwortet haben, entfernt Clean alle Artefakte, die vom Build generiert werden. Aber es wird alles andere zurücklassen.
Wenn Sie einige Anpassungen in Ihrem MSBuild-Projekt vorgenommen haben, kann dies zu Problemen führen und Dinge hinterlassen, von denen Sie denken, dass sie gelöscht werden sollten.
Sie können dieses Problem mit einer einfachen Änderung an Ihrem. * Proj umgehen, indem Sie dies irgendwo gegen Ende hinzufügen:
Dadurch wird alles in Ihrem bin-Ordner der aktuellen Plattform / Konfiguration entfernt.
quelle
Dies ist meine Batch-Datei, mit der ich alle BIN- und OBJ-Ordner rekursiv lösche.
quelle
Ist "sauber" nicht gut genug? Beachten Sie, dass Sie msbuild mit / t: clean über die Befehlszeile aufrufen können.
quelle
Auf unserem Build-Server löschen wir die Verzeichnisse bin und obj explizit über nant-Skripte.
Jedes Projekterstellungsskript ist für seine Ausgabe- / temporären Verzeichnisse verantwortlich. Funktioniert gut so. Wenn wir also ein Projekt ändern und ein neues hinzufügen, stützen wir das Skript auf ein funktionierendes Skript, und Sie bemerken die Löschphase und kümmern sich darum.
Wenn Sie dies auf Ihrem Logikentwicklungscomputer tun, würde ich mich daran halten, über Visual Studio zu bereinigen, wie andere bereits erwähnt haben.
quelle
Ich hasse eigentlich obj-Dateien, die die Quellbäume verunreinigen. Normalerweise richte ich Projekte so ein, dass sie obj-Dateien außerhalb des Quellbaums ausgeben. Für C # -Projekte verwende ich normalerweise
Für C ++ - Projekte
quelle
http://vsclean.codeplex.com/
quelle
Sie könnten den PS-Vorschlag sogar etwas weiter gehen und eine vbs-Datei im Projektverzeichnis wie folgt erstellen:
Aus Sicherheitsgründen habe ich den Parameter -WhatIf eingefügt. Entfernen Sie ihn daher, wenn Sie mit der Liste beim ersten Durchlauf zufrieden sind.
quelle
Ich verwende eine geringfügige Modifikation von Robert H, die Fehler überspringt und die Löschdateien druckt. Mir klar usally auch
.vs
,_resharper
undpackage
Ordner:Erwähnenswert ist auch der
git
Befehl, mit dem alle Änderungen einschließlich ignorierter Dateien und Verzeichnisse gelöscht werden:quelle
Wir haben eine große SLN-Datei mit vielen Projektdateien. Ich habe mit der Richtlinie begonnen, ein "ViewLocal" -Verzeichnis zu haben, in dem sich alle nicht quellengesteuerten Dateien befinden. In diesem Verzeichnis befinden sich ein 'Inter'- und ein' Out'-Verzeichnis. Für die Zwischendateien bzw. die Ausgabedateien.
Dies macht es natürlich einfach, einfach in Ihr 'viewlocal'-Verzeichnis zu gehen und einen einfachen Löschvorgang durchzuführen, um alles loszuwerden.
Bevor Sie sich Gedanken darüber gemacht haben, wie Sie dies mit Skripten umgehen können, sollten Sie sich überlegen, etwas Ähnliches einzurichten.
Ich werde jedoch nicht lügen, die Aufrechterhaltung eines solchen Aufbaus in einer großen Organisation hat sich als ... interessant erwiesen. Besonders wenn Sie Technologien wie QT verwenden, die gerne Dateien verarbeiten und nicht quellengesteuerte Quelldateien erstellen. Aber das ist eine ganz andere Geschichte!
quelle
Berücksichtigen Sie, dass die PS1-Datei im aktuellen Ordner vorhanden ist (der Ordner, in dem Sie die Ordner bin und obj löschen müssen).
quelle
Für die Lösung im Batch. Ich benutze den folgenden Befehl:
FOR /D /R %%G in (obj,bin) DO @IF EXIST %%G IF %%~aG geq d RMDIR /S /Q "%%G"
Der Grund, warum
DIR /S /AD /B xxx
1. nicht verwendet
DIR /S /AD /B obj
wird, gibt eine leere Liste zurück (zumindest unter Windows 10 ). 2. enthält das Ergebnis, das nicht erwartet wird (tobj-Ordner).DIR /S /AD /B *obj
quelle
@IF EXIST %%G IF %%~aG geq d
wird zum Überprüfen des vorhandenen Pfads verwendet und der Pfad ist ein Ordner, keine Datei.Dies funktioniert gut für mich: Starten Sie für / d / r. %% d in (bin, obj, ClientBin, Generated_Code) ist @if vorhanden "%% d" rd / s / q "%% d"
quelle
Ich benutze dazu die .bat-Datei mit diesem Kommando.
quelle
Ich denke, Sie können mit der rechten Maustaste auf Ihre Lösung / Ihr Projekt klicken und auf die Schaltfläche "Reinigen" klicken.
Soweit ich mich erinnere, hat es so funktioniert. Ich habe mein VS.NET jetzt nicht bei mir und kann es daher nicht testen.
quelle