Я хочу удалить все папки bin и obj, чтобы заставить все проекты перестраивать все - PullRequest
211 голосов
/ 16 апреля 2009

Я работаю с несколькими проектами и хочу рекурсивно удалить все папки с именем «bin» или «obj» таким образом, я уверен, что все проекты будут перестраивать все (иногда это единственный способ заставить Visual Studio забыть все о предыдущих сборках).

Есть ли быстрый способ сделать это (например, с помощью файла .bat) без необходимости писать программу .NET?

Ответы [ 25 ]

326 голосов
/ 16 апреля 2009

Это зависит от того, какую оболочку вы предпочитаете использовать.

Если вы используете оболочку cmd в Windows, то должно работать следующее:

FOR /F "tokens=*" %%G IN ('DIR /B /AD /S bin') DO RMDIR /S /Q "%%G"
FOR /F "tokens=*" %%G IN ('DIR /B /AD /S obj') DO RMDIR /S /Q "%%G"

Если вы используете оболочку типа bash или zsh (например, git bash или babun в Windows или в большинстве оболочек Linux / OS X), то это гораздо более приятный и лаконичный способ сделать то, что вы хотите:

find . -iname "bin" | xargs rm -rf
find . -iname "obj" | xargs rm -rf

, и это можно уменьшить до одной строки с помощью ИЛИ:

find . -iname "bin" -o -iname "obj" | xargs rm -rf

Обратите внимание, что если ваши каталоги имен файлов содержат пробелы или кавычки, find отправит эти записи как есть, и xargs может разделиться на несколько записей. В macOS обходной путь должен использовать -print0 и -0, поэтому приведенные выше примеры:

find . -iname "bin" -print0 | xargs -0 rm -rf
find . -iname "obj" -print0 | xargs -0 rm -rf

и

find . -iname "bin" -o -iname "obj" -print0 | xargs -0 rm -rf

Если вы используете Powershell, вы можете использовать это:

Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }

, как видно из ответа Роберта Х ниже - просто убедитесь, что вы отдаете ему должное за ответ в PowerShell, а не мне, если вы решите что-нибудь проголосовать:)

Конечно, было бы разумно сначала выполнить любую команду, которую вы выберете в безопасном месте, чтобы проверить ее!

201 голосов
/ 08 мая 2011

Я нашел эту тему и получил бинго. Немного больше поиска включило этот скрипт Power Shell:

Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }

Я думал, что поделюсь, учитывая, что я не нашел ответа, когда искал здесь.

64 голосов
/ 23 августа 2011

Это сработало для меня:

for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"

На основании этого ответа на superuser.com

31 голосов
/ 23 июня 2009

Я использую, чтобы всегда добавлять новую цель в мои решения для достижения этого.

<Target Name="clean_folders">
  <RemoveDir Directories=".\ProjectName\bin" />
  <RemoveDir Directories=".\ProjectName\obj" />
  <RemoveDir Directories="$(ProjectVarName)\bin" />
  <RemoveDir Directories="$(ProjectVarName)\obj" />
</Target>

И вы можете вызвать его из командной строки

msbuild /t:clean_folders

Это может быть ваш командный файл.

msbuild /t:clean_folders
PAUSE
22 голосов
/ 24 января 2012

Я написал скрипт powershell , чтобы сделать это.

Преимущество заключается в том, что он выводит сводку удаленных папок и игнорируется, если вы указали какую-либо иерархию подпапок, которую следует игнорировать.

Output example

16 голосов
/ 04 ноября 2014

У меня ничего не получалось. Мне нужно было удалить все файлы в папках bin и obj для отладки и выпуска. Мое решение:

1.Правый щелчок по проекту, выгрузка, правый клик, снова редактирование, переход в конец

2.Insert

<Target Name="DeleteBinObjFolders" BeforeTargets="Clean">
  <RemoveDir Directories="..\..\Publish" />
  <RemoveDir Directories=".\bin" />
  <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
</Target>

3. Сохраните, перезагрузите проект, щелкните правой кнопкой мыши, очистите и нажмите.

13 голосов
/ 14 марта 2014

Что-то подобное должно сделать это довольно элегантно, после чистой цели:

<Target Name="RemoveObjAndBin" AfterTargets="Clean">
    <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
    <RemoveDir Directories="$(TargetDir)" />
</Target>
7 голосов
/ 10 марта 2014

Чтобы удалить bin и obj перед сборкой, добавьте в файл проекта:

<Target Name="BeforeBuild">
    <!-- Remove obj folder -->
    <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
    <!-- Remove bin folder -->
    <RemoveDir Directories="$(BaseOutputPath)" />
</Target>

Вот статья: Как удалить папку bin и / или obj перед сборкой или развертыванием

3 голосов
/ 13 марта 2017

Очень похоже на скрипты Стива PowerShell. Я просто добавил TestResults и пакеты к нему, так как он необходим для большинства проектов.

Get-ChildItem .\ -include bin,obj,packages,TestResults -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
3 голосов
/ 06 февраля 2013

Посмотрите на CleanProject , он удалит папки bin, obj, TestResults и Resharper. Исходный код также доступен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...