Я хочу удалить все папки bin и obj, чтобы заставить все проекты перестраивать все

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

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

вопрос задан 16.04.2009
MichaelD
2535 репутация

21 ответов


  • 271 рейтинг

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

    Если вы используете оболочку 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
    

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

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

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

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

    ответ дан Steve Willcock, с репутацией 19748, 16.04.2009
  • 172 рейтинг

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

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

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

    ответ дан Robert H., с репутацией 2374, 8.05.2011
  • 60 рейтинг

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

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

    На основании этот ответ на суперпользователя. com

    ответ дан Daniel Rehner, с репутацией 1441, 23.08.2011
  • 27 рейтинг

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

    
      
      
      
      
    
    

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

    msbuild /t:clean_folders
    

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

    msbuild /t:clean_folders
    PAUSE
    
    ответ дан Jhonny D. Cano -Leftware-, с репутацией 12698, 23.06.2009
  • 21 рейтинг

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

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

    Output example

    ответ дан doblak, с репутацией 2276, 24.01.2012
  • 15 рейтинг

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

    1. Щелкните правой кнопкой мыши по проекту, выгрузите, снова щелкните правой кнопкой мыши и отредактируйте, перейдите в конец

    .

    2. Вставить

    
      
      
      
    
    

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

    ответ дан Kdefthog, с репутацией 151, 4.11.2014
  • 11 рейтинг

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

    
        
        
    
    
    ответ дан vezenkov, с репутацией 2122, 14.03.2014
  • 6 рейтинг

    Для удаления bin и obj перед сборкой добавьте в файл проекта:

    
        
        
        
        
    
    

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

    ответ дан Shaman, с репутацией 1771, 10.03.2014
  • 3 рейтинг

    Взгляните на CleanProject , он удалит папки bin, obj, TestResults и Resharper. Исходный код также доступен.

    ответ дан habakuk, с репутацией 1302, 6.02.2013
  • 2 рейтинг

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

    Get-ChildItem .\ -include bin,obj,packages,TestResults -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
    
    ответ дан Aboo, с репутацией 1240, 13.03.2017
  • 2 рейтинг

    Вот ответ Я дал аналогичный вопрос: Простой, легкий, работает довольно хорошо и не требует ничего, кроме того, что у вас уже есть в Visual Studio.

    Поскольку другие уже ответили, Clean удалит все артефакты, сгенерированные сборкой. Но это оставит позади все остальное.

    Если у вас есть некоторые настройки в вашем проекте MSBuild, это может привести к проблемам и оставить вещи, которые, как вы думаете, должны были быть удалены.

    Вы можете обойти эту проблему, просто изменив свою. * proj, добавив это где-то ближе к концу:

    
        
    
    

    Который удалит все в вашей папке bin текущей платформы / конфигурации.

    ответ дан Newtopian, с репутацией 5129, 19.08.2013
  • 2 рейтинг

    Разве «чистый» не достаточно хорош? Обратите внимание, что вы можете вызвать msbuild с помощью / t: clean из командной строки.

    ответ дан Brian, с репутацией 104726, 16.04.2009
  • 2 рейтинг

    от Использование Windows PowerShell для удаления папок obj, bin и ReSharper

    очень похож на Роберт Н ответ с более коротким синтаксисом

    1. запустить powershell
    2. cd (изменить каталог) в корень папки вашего проекта
    3. вставьте и запустите скрипт ниже

      реж. \ -включить bin, obj, resharper * -recurse | foreach ($ ) {rd $ _. полное имя –Recurse –Force}

    ответ дан Iman Abidi, с репутацией 11107, 4.06.2013
  • 1 рейтинг

    На нашем сервере сборки мы явно удаляем каталоги bin и obj с помощью скриптов nant.

    Каждый скрипт сборки проекта отвечает за свои выходные / временные каталоги. Так хорошо работает. Поэтому, когда мы меняем проект и добавляем новый, мы основываем сценарий на рабочем сценарии, и вы замечаете этап удаления и заботитесь о нем.

    Если вы делаете это на своем компьютере для разработки логики, я бы продолжил чистить через Visual Studio, как уже упоминали другие.

    ответ дан Simeon Pilgrim, с репутацией 5106, 16.04.2009
  • 1 рейтинг

    Вы могли бы на самом деле принять предложение PS немного дальше и создать файл vbs в каталоге проекта, например:

    Option Explicit
    Dim oShell, appCmd
    Set oShell  = CreateObject("WScript.Shell")
    appCmd      = "powershell -noexit Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse -WhatIf }"
    oShell.Run appCmd, 4, false
    

    В целях безопасности я включил параметр -WhatIf, поэтому удалите его, если вы удовлетворены списком при первом запуске.

    ответ дан KL XL, с репутацией 11, 30.03.2012
  • 1 рейтинг

    http: // vsclean. CodePlex. com /

    Инструмент командной строки, который находит Visual Студия решений и запускает Clean командовать им. Это позволяет вам чистить вверх по каталогам / bin / * всех этих старые проекты у вас валяются ваш жесткий диск

    ответ дан Joel Martinez, с репутацией 31746, 23.06.2009
  • 0 рейтинг

    Я действительно ненавижу файлы obj, засоряющие исходные деревья. Я обычно настраиваю проекты так, чтобы они выводили файлы obj за пределы исходного дерева. Для проектов C # я обычно использую

     ..\..\obj\$(AssemblyName)\$(Configuration)\
    

    Для проектов C ++

     IntermediateDirectory="..\..\obj\$(ProjectName)\$(ConfigurationName)"
    
    ответ дан Juozas Kontvainis, с репутацией 6012, 16.04.2009
  • 0 рейтинг

    У нас большой. Файлы SLN со многими файлами проекта. Я начал политику наличия директории «ViewLocal», в которой находятся все неконтролируемые файлы. Внутри этого каталога находится каталог Inter и Out. Для промежуточных файлов и выходных файлов соответственно.

    Это, очевидно, позволяет легко перейти в каталог 'viewlocal' и выполнить простое удаление, чтобы избавиться от всего.

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

    Хотя я не буду лгать, поддержание такой установки в большой организации доказало. , , , интересно. Особенно, когда вы используете такие технологии, как QT, которые любят обрабатывать файлы и создавать неконтролируемые исходные файлы. Но это целая другая история!

    ответ дан pj4533, с репутацией 891, 16.04.2009
  • 0 рейтинг

    Это мой командный файл, который я использую для рекурсивного удаления всех папок BIN и OBJ.

    1. Создайте пустой файл и назовите его DeleteBinObjFolders. летучая мышь
    2. Скопируйте и вставьте код ниже в DeleteBinObjFolders. летучая мышь
    3. Переместите DeleteBinObjFolders. файл bat в одной папке с вашим решением (*. sln) файл.
    @echo off
    @echo Deleting all BIN and OBJ folders...
    for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
    @echo BIN and OBJ folders successfully deleted :) Close the window.
    pause > nul
    
    ответ дан Alper Ebicoglu, с репутацией 2687, 19.03.2018
  • 0 рейтинг

    Учитывая, что файл PS1 присутствует в currentFolder (папке, в которой необходимо удалить папки bin и obj)

    $currentPath = $MyInvocation.MyCommand.Path
    $currentFolder = Split-Path $currentPath
    
    Get-ChildItem $currentFolder -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
    
    ответ дан ShivanandSK, с репутацией 541, 16.05.2016
  • -1 рейтинг

    Я думаю, что вы можете щелкнуть правой кнопкой мыши свое решение / проект и нажать кнопку «Очистить».

    Насколько я помню, это работало так. У меня нет моего VS. NET со мной сейчас, поэтому не могу проверить это.

    ответ дан dr. evil, с репутацией 16902, 16.04.2009