448 Stimmen

Ich möchte alle bin- und obj-Ordner löschen, um alle Projekte dazu zu zwingen, alles neu zu erstellen.

Ich arbeite mit mehreren Projekten und möchte alle Ordner mit dem Namen 'bin' oder 'obj' rekursiv löschen, um sicherzustellen, dass alle Projekte alles neu erstellen (manchmal ist dies der einzige Weg, um Visual Studio dazu zu zwingen, alle vorherigen Builds zu vergessen).

Gibt es einen schnellen Weg, dies zu erreichen (mit einer .bat-Datei zum Beispiel), ohne ein .NET-Programm schreiben zu müssen?

80 Stimmen

Es wäre schön, wenn Build->Clean Solution dies tatsächlich tun würde.

2 Stimmen

Es gibt ein Plugin, das ich gefunden habe namens CleanBinAndObj, das alle bin und obj Ordner löscht. Sehr effektiv für einzelne Lösungen mit vielen Projekten.

6voto

eugstman Punkte 868

Ich verwende eine leichte Modifikation von Robert H, die Fehler überspringt und die zu löschenden Dateien ausgibt. Ich lösche in der Regel auch die Ordner .vs, _resharper und package:

Get-ChildItem -include bin,obj,packages,'_ReSharper.Caches','.vs' -Force -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse -ErrorAction SilentlyContinue -Verbose}

Es ist auch erwähnenswert, dass das git-Kommando alle Änderungen einschließlich ignorierten Dateien und Verzeichnissen löscht:

git clean -dfx

0 Stimmen

Git clean -dfx ist perfekt

0 Stimmen

Denken Sie daran, dass git clean alles entfernen wird, was nicht zum Stamm-Repository gehört. Möglicherweise ist das nicht das, was Sie möchten, wenn Sie nur bin und obj entfernen müssen.

6voto

Alper Ebicoglu Punkte 7833

Dies ist meine Batch-Datei, die ich zum rekursiven Löschen aller BIN- und OBJ-Ordner verwende.

  1. Erstellen Sie eine leere Datei und benennen Sie sie DeleteBinObjFolders.bat
  2. Kopieren Sie den unten stehenden Code in die Datei DeleteBinObjFolders.bat
  3. Verschieben Sie die Datei DeleteBinObjFolders.bat in den gleichen Ordner wie Ihre Lösungsdatei (*.sln).

    @echo off @echo Lösche alle BIN- und OBJ-Ordner... for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d" @echo BIN- und OBJ-Ordner erfolgreich gelöscht :) Fenster schließen. pause > nul

1 Stimmen

Ich habe dieses Skript gerade auf meinen Desktop gelegt - aber die Zeile cd C:\Git\Workspace nach der ersten Zeile hinzugefügt...

0 Stimmen

Bitte beachten Sie, dass /r Vorrang vor /d hat, daher können auch Dateien mit den Namen "bin" und "obj" gelöscht werden. Der Befehl FOR hat diskrete "Modi". R und D sind Beispiele für diese Modi, von denen jeweils nur einer zur gleichen Zeit aktiv ist.

4voto

kalalele Punkte 35

Einige Lösungen oben geben Antworten darauf, wie man Ordner ausschließt, jedoch nicht in cmd. Ergänzend zu Steve Willcocks Antwort, um z. B. den Ordner node_modules auszuschließen, der möglicherweise bin Ordner darin hat, kann man den erweiterten Einzeiler unten verwenden.

FOR /F "tokens=*" %G IN ('DIR /B /AD /S bin obj ^|find ^"node_modules^" /v /i') DO RMDIR /S /Q "%G"

Wie von anderen angemerkt, im Falle der Nutzung des obigen Befehls in einem cmd-Skript und nicht direkt auf der Befehlszeile, ersetzen Sie %G durch %%G.

0 Stimmen

Ersetzen Sie %G durch %%G

4voto

l33t Punkte 15267

In VS 2019/VS 2022 ist dies die einzige vernünftige Lösung.

Erstellen Sie im Lösungsordner (wo sich die .sln-Datei befindet) eine Datei namens Directory.Build.props und bearbeiten Sie sie wie unten gezeigt. Lesen Sie über diese spezielle Datei hier.

Directory.Build.props

      $(ProjectDir)$(BaseIntermediateOutputPath)
      $(ProjectDir)$(BaseOutputPath)

      $([MSBuild]::MakeRelative(
        $(ProjectDir),
        $(BaseIntermediateOutputPath)
      ))

      $(ProjectDir)$(BaseIntermediateOutputPathFix)

Es ist nicht erforderlich, eine Reihe von .csproj-Dateien zu ändern. Beachten Sie auch, dass ich nicht $(TargetDir) entferne, wie es einige vorgeschlagen haben. Das könnte das Build-System lähmen, wenn $(OutDir) auf ein benutzerdefiniertes Verzeichnis gesetzt wurde (eine häufige Vorgehensweise).

1 Stimmen

Es sei darauf hingewiesen, dass diese Lösung manchmal mit VS interferiert, wodurch es sich über ein fehlendes project.assets.json beschwert. Habe es daher in meiner Lösung deaktiviert. Einige Verbesserungen sind notwendig.

3voto

Newtopian Punkte 7234

Hier ist die Antwort, die ich zu einer ähnlichen Frage gegeben habe. Einfach, einfach, funktioniert ziemlich gut und erfordert nichts anderes als das, was Sie bereits mit Visual Studio haben.

Wie andere bereits geantwortet haben, wird "Clean" alle Artefakte entfernen, die vom Build generiert werden. Es wird jedoch alles andere zurücklassen.

Wenn Sie benutzerdefinierte Anpassungen in Ihrem MSBuild-Projekt haben, könnte dies Probleme verursachen und Dinge zurücklassen, die Sie hätten löschen sollen.

Sie können dieses Problem umgehen, indem Sie eine einfache Änderung an Ihrer .*proj vornehmen und dies irgendwo am Ende hinzufügen:

Was alles im Bin-Ordner der aktuellen Plattform/Konfiguration entfernen wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X