Как очистить папки Visual Studio и obj

Если вы щелкните правой кнопкой мыши по папке, вы увидите пункт меню "Очистить". Я предположил, что это очистит (удалит) каталог obj и bin. Однако, насколько я вижу, он ничего не делает. Есть ли другой способ? (пожалуйста, не говорите мне, чтобы перейти в Windows Explorer или cmd.exe) Я хотел бы удалить папку obj и bin, чтобы я мог легко закрепить все это.

Ответ 1

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

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

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

<Target Name="SpicNSpan"
        AfterTargets="Clean">
    <RemoveDir Directories="$(OUTDIR)"/>
</Target>

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

------ Редактировать Небольшое развитие, основываясь на ответе шамана ниже (поделитесь голосами и дайте ему тоже)

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

---- Изменить снова с частями из xDisruptor, но я удалил удаление .vs, так как это будет лучше обслуживать в .gitignore (или эквивалент)

Обновлено для VS 2015.

<Target Name="SpicNSpan" AfterTargets="Clean"> <!-- common vars https://msdn.microsoft.com/en-us/library/c02as0cs.aspx?f=255&MSPPError=-2147217396 -->
     <RemoveDir Directories="$(TargetDir)" /> <!-- bin -->
     <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" /> <!-- obj -->
</Target>

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

Если вы проголосуете за этот ответ, обязательно проголосуйте за них обоих.

Ответ 2

Для Visual Studio 2015 переменные MSBuild немного изменились:

  <Target Name="SpicNSpan" AfterTargets="Clean"> <!-- common vars https://msdn.microsoft.com/en-us/library/c02as0cs.aspx?f=255&MSPPError=-2147217396 -->
         <RemoveDir Directories="$(TargetDir)" /> <!-- bin -->
         <RemoveDir Directories="$(SolutionDir).vs" /> <!-- .vs -->
         <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" /> <!-- obj -->
  </Target>

Обратите внимание, что этот фрагмент также удаляет папку .vs из корневого каталога вашего решения. Вы можете закомментировать связанную строку, если считаете, что удаление папки .vs является излишним. У меня он включен, потому что я заметил, что в некоторых сторонних проектах это вызывает проблемы, когда файлы ala application.config существуют в папке .vs.

Приложение:

Если вы хотите оптимизировать поддержку ваших решений, вы можете сделать еще один шаг вперед и поместить приведенный выше фрагмент в отдельный файл, например:

  <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
       <Target Name="SpicNSpan" AfterTargets="Clean"> <!-- common vars https://msdn.microsoft.com/en-us/library/c02as0cs.aspx?f=255&MSPPError=-2147217396 -->
            <RemoveDir Directories="$(TargetDir)" /> <!-- bin -->
            <RemoveDir Directories="$(SolutionDir).vs" /> <!-- .vs -->
            <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" /> <!-- obj -->
       </Target>
  </Project>

А затем включите этот файл в самый конец каждого из ваших файлов *.csproj, например так:

     [...]
     <Import Project="..\..\Tools\ExtraCleanup.targets"/>
  </Project>

Таким образом, вы можете централизованно обогащать или настраивать свою дополнительную логику очистки, не тратя времени на ручное редактирование каждого файла *.csproj вручную каждый раз, когда вы хотите внести улучшения.

Ответ 3

Если вы используете git и имеете правильный .gitignore в своем проекте, вы можете

git clean -xdf --dry-run

удалить абсолютно каждый файл в списке .gitignore, то есть очистит папки obj и bin (x вызывает это поведение)

Ответ 5

Ознакомьтесь с фантастическим открытым исходным кодом Ron Jacobs CleanProject Он даже позаботится о том, чтобы сделать zipping, если хотите.

Вот ссылка CodePlex

Ответ 6

Этот сайт: https://sachabarbs.wordpress.com/2014/10/24/powershell-to-clean-visual-studio-binobj-folders/ использует powershell для удаления любых папок bin и obj из текущего каталога и подкаталогов. Должна быть возможность запустить его из корня диска. Вот цитаты из статьи:

Вот версия Williams

 gci -inc bin,obj -rec | rm -rec -force

У Вильямса собственные слова

Это уничтожит все каталоги bin и obj в текущем каталоге и каждом подкаталоге. Очень полезно запускать в каталоге рабочей области, чтобы перейти в "чистое" состояние, особенно когда кто-то испортил и обнаружил что-то, что не удается уловить при очистке или перестройке в среде IDE.

Для тех, кто читает, возможно, не знает, PowerShell поддерживает псевдонимы команд, здесь он снова переписан без использования псевдонимов

Get-ChildItem -inc bin,obj -rec | Remove-Item -rec -force

ПРИМЕЧАНИЕ. Вы должны сохранить это в файле PowerShell и поместить этот файл в корень вашего решения (где находится файл .sln), а затем запустить его, когда вы хотите произвести надлежащую очистку (а не микширующую мышь, которая VisualStudio делает, и сообщает об успехе тоже).

Ответ 7

Эта небольшая утилита может быть вам нужна.

Он также удаляет файлы *.suo и *.user и создает отчет обо всех файлах и папках, которые по какой-либо причине не могут быть удалены.

Ответ 8

Он не удаляет папки, но удаляет побочные продукты сборки. Есть ли причина, по которой вы хотите удалить фактические папки создания?

Ответ 9

Очистить удалит все промежуточные и конечные файлы, созданные процессом сборки, такие как файлы .obj и файлы .exe или .dll.

Однако он не удаляет каталоги, в которых эти файлы создаются. Я не вижу веских причин, по которым вам нужны каталоги, которые нужно удалить. Можете ли вы подробнее объяснить?

Если вы заглянете в эти каталоги до и после "Чистоты", вы увидите, что ваш скомпилированный вывод очищается.

Ответ 10

Вы можете легко найти и удалить папки bin и obj в Far Manager.

  • Найдите решение и нажмите Alt + F7
  • В диалоговом окне настроек поиска:

    • Введите "bin, obj" в поле "Маска файла или несколько масок файла"
    • Проверить параметр "Поиск папок"
    • Нажмите Enter
  • После выполнения поиска переключить представление на "Панель" .

  • Выберите все файлы (с Ctrl + A) и удалите папки (нажмите "Shift + Del" )

Надеюсь, что это поможет кому-то.

Ответ 11

Я еще не могу добавить комментарий (минимальная репутация не достигнута)
поэтому я оставляю этот ответ, чтобы подчеркнуть, что:

действие "BeforeBuild" с <RemoveDir Directories="$(BaseIntermediateOutputPath)" /> отлично, но для меня противоречит модели Entity Framework, включенной в один проект.

Получаемая ошибка:

Error reading resource '{mymodel}.csdl' -- 'Could not find a part of the path '{myprojectpath}\obj\Release\edmxResourcesToEmbed\{mymodel}.csdl

Я предполагаю, что "edmxResourcesToembed" создается до того, как будет выполнено целевое действие "BeforeBuild".

Ответ 12

Основываясь на ответе Джо, я преобразовал код VB в С#:

/// <summary>
/// Based on code of VSProjCleaner tool (C) 2005 Francesco Balena, Code Archirects
/// </summary>
static class VisualStudioCleaner
{
    public static void Process(string rootDir)
    {
        // Read all the folder names in the specified directory tree
        string[] dirNames = Directory.GetDirectories(rootDir, "*.*", SearchOption.AllDirectories);
        List<string> errorsList = new List<string>();

        // delete any .suo and csproj.user file
        foreach (string dir in dirNames) {
            var files = new List<string>();
            files.AddRange(Directory.GetFiles(dir, "*.suo"));
            files.AddRange(Directory.GetFiles(dir, "*.user"));
            foreach (string fileName in files) {
                try {
                    Console.Write("Deleting {0} ...", fileName);
                    File.Delete(fileName);
                    Console.WriteLine("DONE");
                } catch (Exception ex) {
                    Console.WriteLine();
                    Console.WriteLine(" ERROR: {0}", ex.Message);
                    errorsList.Add(fileName + ": " + ex.Message);
                }
            }
        }

        // Delete all the BIN and OBJ subdirectories
        foreach (string dir in dirNames) {
            string dirName = Path.GetFileName(dir).ToLower();
            if (dirName == "bin" || dirName == "obj") {
                try {
                    Console.Write("Deleting {0} ...", dir);
                    Directory.Delete(dir, true);
                    Console.WriteLine("DONE");
                } catch (Exception ex) {
                    Console.WriteLine();
                    Console.WriteLine(" ERROR: {0}", ex.Message);
                    errorsList.Add(dir + ": " + ex.Message);
                }
            }
        }
        Console.WriteLine(new string('-', 60));
        if (errorsList.Count == 0) {
            Console.WriteLine("All directories and files were removed successfully");
        } else {
            Console.WriteLine("{0} directories or directories couldn't be removed", errorsList.Count);
            Console.WriteLine(new string('-', 60));
            foreach (string msg in errorsList) {
                Console.WriteLine(msg);
            }
        }
    }
}

Ответ 13

Я использую VisualStudioClean, который легко понять и предсказуемо. Зная, как это работает и какие файлы, которые он собирается удалить, меня освобождает.

Раньше я пробовал VSClean (примечание VisualStudioClean не VSClean), VSClean более продвинутый, он имеет множество конфигураций, которые иногда заставляют меня интересно, какие файлы он собирается удалить? Одна неправильная конфигурация приведет к потере моих исходных кодов. Тестирование того, как будет работать конфигурация, требует резервного копирования всех моих проектов, которые занимают много раз, поэтому в итоге я выбираю VisualStudioClean вместо этого.

Заключение: VisualStudioClean, если вы хотите провести базовую очистку, VSClean для более сложного сценария.

Ответ 14

Вот как я делаю с командным файлом, чтобы рекурсивно удалить все папки BIN и OBJ.

  • Создайте пустой файл и назовите его DeleteBinObjFolders.bat
  • Скопируйте и вставьте следующий код в DeleteBinObjFolders.bat
  • Переместите файл 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

Ответ 15

Я храню свои готовые проекты VS, сохраняя только исходный код.

Я удаляю папки BIN, DEBUG, RELEASE, OBJ, ARM и .vs из всех проектов.

Это значительно уменьшает размер проекта. Проект

должен быть восстановлен при извлечении из хранилища.

Ответ 16

Просто дополнение ко всем хорошим ответам, приведенным выше, на случай, если кто-то не поймет, насколько просто в VB/С# автоматизировать весь процесс вплоть до zip-архива.

Таким образом, вы просто берете простое приложение Forms из шаблонов (если у вас еще нет вспомогательного приложения) и добавляете к нему кнопку, а затем ClickOnce устанавливаете его на свой рабочий стол, не беспокоясь о специальных настройках или многом другом. Это весь код, который нужно прикрепить к кнопке:

Imports System.IO.Compression

Private Sub btnArchive_Click(sender As Object, e As EventArgs) Handles btnArchive.Click
    Dim src As String = "C:\Project"
    Dim dest As String = Path.Combine("D:\Archive", "Stub" & Now.ToString("yyyyMMddHHmmss") & ".zip")
    If IsProjectOpen() Then 'You don't want Visual Studio holding a lock on anything while you're deleting folders
        MsgBox("Close projects first, (expletive deleted)", vbOKOnly)
        Exit Sub
    End If
    If MsgBox("Are you sure you want to delete bin and obj folders?", vbOKCancel) = DialogResult.Cancel Then Exit Sub
    If ClearBinAndObj(src) Then ZipFile.CreateFromDirectory(src, dest)
End Sub

Public Function ClearBinAndObj(targetDir As String) As Boolean
    Dim dirstodelete As New List(Of String)
    For Each d As String In My.Computer.FileSystem.GetDirectories(targetDir, FileIO.SearchOption.SearchAllSubDirectories, "bin")
        dirstodelete.Add(d)
    Next
    For Each d As String In My.Computer.FileSystem.GetDirectories(targetDir, FileIO.SearchOption.SearchAllSubDirectories, "obj")
        dirstodelete.Add(d)
    Next
    For Each d In dirstodelete
        Try
            Directory.Delete(d, True)
        Catch ex As Exception
            If MsgBox("Error: " & ex.Message & " - OK to continue?", vbOKCancel) = MsgBoxResult.Cancel Then Return False
        End Try
    Next
    Return True
End Function

Public Function IsProjectOpen()
    For Each clsProcess As Process In Process.GetProcesses()
        If clsProcess.ProcessName.Equals("devenv") Then Return True
    Next
    Return False
End Function

Следует помнить, что удаление файловой системы может привести к ошибкам. Один из моих любимых был, когда я понял, что не могу удалить папку, потому что она содержит элементы, созданные Visual Studio при работе с повышенными привилегиями (чтобы я мог отлаживать службу).

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