Я хочу удалить все папки bin и obj, чтобы заставить все проекты перестроить все
Я работаю с несколькими проектами, и я хочу рекурсивно удалить все папки с именем " bin " или "obj". Таким образом, я уверен, что все проекты будут перестраивать everyhing (иногда это единственный способ заставить visual studio забыть все о предыдущих сборках).
есть ли быстрый способ выполнить это (например, с файлом bat) без необходимости писать программу .net?
21 ответов
Это зависит от оболочки, которую вы предпочитаете использовать.
если вы используете оболочку 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 }
как видно ответ Роберта H ниже - просто убедитесь, что вы даете ему кредит на ответ powershell, а не мне, если вы решите проголосовать за что-нибудь:)
было бы, конечно, разумно запустить любую команду, которую вы выберете в безопасном месте, чтобы проверить ее!
Я нашел эту нить и получил Бинго. Немного больше поиска оказалось этот скрипт power shell:
Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
Я думал, что поделюсь, учитывая, что я не нашел ответа, когда искал здесь.
это сработало для меня:
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
на основе ответ ВКЛ superuser.com
Я всегда добавляю новую цель в свои решения для достижения этого.
<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
Я писал сценарий powershell сделать это.
преимущество заключается в том, что он распечатывает сводку удаленных папок и игнорирует их, если вы указали иерархию подпапок, которую нужно игнорировать.
ничего не работало для меня. Мне нужно было удалить все файлы в папках bin и obj для отладки и выпуска. Мое решение:
1.Щелкните правой кнопкой мыши проект, выгрузить, щелкните правой кнопкой мыши снова изменить, перейдите к нижней
2.Вставить
<Target Name="DeleteBinObjFolders" BeforeTargets="Clean">
<RemoveDir Directories="..\..\Publish" />
<RemoveDir Directories=".\bin" />
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
</Target>
3. Сохраните, перезагрузите проект, щелкните правой кнопкой мыши clean и presto.
что-то вроде этого должно сделать это довольно элегантно, после чистой цели:
<Target Name="RemoveObjAndBin" AfterTargets="Clean">
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<RemoveDir Directories="$(TargetDir)" />
</Target>
чтобы удалить bin и obj перед сборкой, добавьте в файл проекта:
<Target Name="BeforeBuild">
<!-- Remove obj folder -->
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<!-- Remove bin folder -->
<RemoveDir Directories="$(BaseOutputPath)" />
</Target>
вот статья: Как удалить папку bin и / или obj перед сборкой или развертыванием
посмотреть CleanProject, он удалит папки bin, папки obj, папки TestResults и папки Resharper. Исходный код также доступен.
"чистый" недостаточно хорош? Обратите внимание, что вы можете вызвать msbuild с /t:clean из командной строки.
с использование Windows PowerShell для удаления папок obj, bin и ReSharper
очень похож на Роберт H ответ короче синтаксис
- запустите powershell
- компакт-диск(изменить dir) в корень вашей папки проекта
-
вставить и запустить ниже скрипт
реж .\ - включить bin, obj,resharper* - recurse | foreach($) { rd $_.полное имя –рекурсия - Force}
вот ответ: Я дал аналогичный вопрос, простой, легкий, работает довольно хорошо и не требует ничего, кроме того, что у вас уже есть с Visual Studio.
поскольку другие уже ответили, Clean удалит все артефакты, созданные сборкой. Но все остальное останется позади.
Если у вас есть некоторые настройки в вашем проекте MSBuild, это может вызвать проблемы и оставить позади вещи, которые вы думаете, что это должно быть удаленный.
вы можете обойти эту проблему с помощью простых изменений в вашем .* proj, добавив Это где-то в конце :
<Target Name="SpicNSpan"
AfterTargets="Clean">
<RemoveDir Directories="$(OUTDIR)"/>
</Target>
который удалит все в вашей папке bin текущей платформы / конфигурации.
очень похоже на сценарии PowerShell Стива. Я просто добавил TestResults и пакеты к нему, как это необходимо для большинства проектов.
Get-ChildItem .\ -include bin,obj,packages,TestResults -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
на нашем сервере сборки мы явно удаляем каталоги bin и obj с помощью скриптов nant.
каждый сценарий сборки проекта отвечает за его выходные/временные каталоги. Это прекрасно работает. Поэтому, когда мы меняем проект и добавляем новый, мы основываем сценарий на рабочем сценарии, и вы замечаете стадию удаления и заботитесь о ней.
Если вы делаете это на машине разработки логики, я бы придерживался очистки через Visual Studio, как упоминали другие.
инструмент командной строки, который находит Visual Studio solutions и запускает чистую командуйте ими. Это позволяет вам очистить вверх по каталогам /bin/* всех тех старые проекты, на которых ты валяешься. ваш жесткий диск
вы могли бы на самом деле принять предложение 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, поэтому удалите его, если вы удовлетворены списком при первом запуске.
Я действительно ненавижу файлы obj, усеивающие исходные деревья. Обычно я настраиваю проекты так, чтобы они выводили obj-файлы за пределы исходного дерева. Для проектов C# я обычно использую
<IntermediateOutputPath>..\..\obj$(AssemblyName)$(Configuration)\</IntermediateOutputPath>
для проектов C++
IntermediateDirectory="..\..\obj$(ProjectName)$(ConfigurationName)"
У нас большой .SLN файлы со многими файлами проекта. Я начал политику наличия каталога" ViewLocal", где находятся все файлы, не контролируемые sourcecontrolled. Внутри этого каталога есть каталог "Inter" и "Out". Для промежуточных файлов и выходных файлов, соответственно.
Это, очевидно, позволяет легко просто перейти в каталог "viewlocal" и сделать простое удаление, чтобы избавиться от всего.
прежде чем вы потратили время, выясняя способ обойдя это с помощью скриптов, Вы можете подумать о настройке чего-то подобного.
Я не буду лгать, хотя, поддержание такой установки в большой организации доказало....интересный. Особенно когда вы используете такие технологии как Qt, что бы обрабатывать файлы и создавать не sourcecontrolled исходные файлы. Но это совсем другая история!
учитывая, что файл 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 }
Это мой пакетный файл, который я использую для рекурсивного удаления всех папок BIN и OBJ.
- создать пустой файл и назовите его DeleteBinObjFolders.летучая мышь!--6-->
- копировать-вставить код ниже кода в DeleteBinObjFolders.летучая мышь!--6-->
- перемещение DeleteBinObjFolders.летучая мышь!--6--> файл в той же папке с вашим решением (*.файл 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
Я думаю, вы можете щелкнуть правой кнопкой мыши на своем решении/проекте и нажать кнопку "Очистить".
насколько я помню, он работал именно так. У меня нет ... VS.NET со мной сейчас так нельзя.