Если вы щелкните правой кнопкой мыши папку, вы увидите пункт меню «Очистить». Я предполагал, что это очистит (удалит) каталог obj и bin. Однако, насколько я понимаю, ничего не делает. Есть другой способ? (пожалуйста, не говорите мне идти в проводник Windows или cmd.exe) Я бы хотел удалить папки obj и bin, чтобы я мог легко заархивировать все это.
visual-studio
msbuild
tom7
источник
источник
Ответы:
Поскольку другие уже ответили, 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>
Он также дает хорошее предложение по упрощению развертывания и сопровождения задачи, если у вас есть несколько проектов, в которые нужно внедрить это.
Если вы проголосуете за этот ответ, обязательно проголосуйте за них обоих.
источник
Если вы используете git и
.gitignore
в вашем проекте есть правильный , вы можетеудалить абсолютно каждый файл в
.gitignore
списке, т.е. он очиститobj
, иbin
папки (x
триггеры этого поведения)источник
--dry-run
, что это только говорит вам, что будет удалено. niceДля 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 каждый раз, когда вы хотите что-то улучшить.
источник
Чтобы удалить bin и obj перед сборкой, добавьте в файл проекта:
<Target Name="BeforeBuild"> <!-- Remove obj folder --> <RemoveDir Directories="$(BaseIntermediateOutputPath)" /> <!-- Remove bin folder --> <RemoveDir Directories="$(BaseOutputPath)" /> </Target>
Вот статья: Как удалить папку bin и / или obj перед сборкой или развертыванием
источник
Этот сайт: https://sachabarbs.wordpress.com/2014/10/24/powershell-to-clean-visual-studio-binobj-folders/ использует команды PowerShell Уильяма Кемпфа для удаления любых папок bin и obj из текущего каталога и подкаталоги. Должна быть возможность запускать его из корня диска.
Вот версия Уильяма
По словам Уильяма:
источник
Посмотрите фантастический проект CleanProject с открытым исходным кодом от Рона Джейкобса. Если хотите, он даже позаботится о архивировании.
Вот ссылка на CodePlex
источник
Вы можете легко найти и удалить папки bin и obj в Far Manager.
В диалоговом окне настройки поиска:
После завершения поиска переключите вид на «Панель» .
Надеюсь, это кому-то поможет.
источник
В Windows просто откройте проводник, перейдите в папку SLN, щелкните в поле поиска и введите kind: = folder; obj -> для папок obj используйте CTRL + A и удалите их - то же самое для bin Готово
Нет необходимости в каком-либо инструменте или дополнительном программном обеспечении;)
источник
Он не удаляет папки, но удаляет побочные продукты сборки. Есть ли причина, по которой вы хотите удалить фактические папки сборки ?
источник
Очистка удалит все промежуточные и окончательные файлы, созданные в процессе сборки, такие как файлы .obj и файлы .exe или .dll.
Однако при этом не удаляются каталоги, в которых создаются эти файлы. Я не вижу веской причины, по которой вам нужно удалить каталоги. Вы можете объяснить дальше?
Если вы заглянете внутрь этих каталогов до и после «Очистки», вы должны увидеть, что ваш скомпилированный вывод очищен.
источник
Я пока не могу добавить комментарий (минимальная репутация не достигнута),
поэтому оставляю этот ответ, чтобы подчеркнуть:
Действие «BeforeBuild»
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
отлично, но, на мой взгляд , оно противоречит модели Entity Framework, включенной в тот же проект.Я получаю следующее сообщение об ошибке:
Я полагаю, что "edmxResourcesToembed" создается до выполнения целевого действия "BeforeBuild".
источник
Основываясь на ответе Джо, я преобразовал код VB в C #:
/// <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); } } } }
источник
Я использую VisualStudioClean, который прост для понимания и предсказуем. Меня успокаивает знание того, как это работает и какие файлы собираются удалить.
Раньше я пробовал VSClean (обратите внимание, что VisualStudioClean - это не VSClean), VSClean более продвинутый, у него много конфигураций, что иногда заставляет меня задуматься, какие файлы он собирается удалить? Одна неверная конфигурация приведет к потере моих исходных кодов. Чтобы проверить, как будет работать конфигурация, необходимо создать резервную копию всех моих проектов, что занимает много времени, поэтому в конце я выбираю VisualStudioClean.
Вывод: VisualStudioClean, если вам нужна базовая очистка, VSClean для более сложного сценария.
источник
Вот как я делаю с пакетным файлом для рекурсивного удаления всех папок BIN и OBJ.
@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, сохраняя только исходный код.
Я удаляю папки BIN, DEBUG, RELEASE, OBJ, ARM и .vs из всех проектов.
Это значительно уменьшает размер проекта. Проэкт
должны быть восстановлены при извлечении из хранилища.
источник
Просто дополнение ко всем прекрасным ответам выше на случай, если кто-то не понимает, насколько легко в VB / C # автоматизировать весь процесс вплоть до 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 при работе с повышенными привилегиями (чтобы я мог отлаживать службу).
Мне нужно было вручную дать разрешение или, я полагаю, запустить приложение с повышенными привилегиями. В любом случае, я думаю, что есть некоторая ценность в использовании интерактивного подхода на основе графического интерфейса к сценарию, особенно потому, что это, вероятно, что-то, что делается в конце долгого дня, и вы не хотите позже узнавать, что ваша резервная копия на самом деле не существует ...
источник
Обновление: Visual Studio 2019 (очистите [bin] и [obj] перед выпуском). Однако я не уверен, нужно ли удалять [obj]. Имейте в виду, что здесь также размещена конфигурация пакета nuget. Если вы так считаете, можете убрать вторую строчку.
<Target Name="PreBuild" BeforeTargets="PreBuildEvent" Condition="'$(Configuration)' == 'Release'"> <!--remove bin--> <Exec Command="rd /s /q "$(ProjectDir)$(BaseOutputPath)" && ^" /> <!--remove obj--> <Exec Command="rd /s /q "$(BaseIntermediateOutputPath)Release"" /> </Target>
источник
этот ответ отличный, я просто хочу прокомментировать последнюю часть ответа
Кроме того, вы можете добавить в свой профиль: ps1
Затем вы можете использовать либо CleanSolution, либо cs для запуска. Таким образом, вы можете использовать его для любого проекта и без префикса ./ имени файла.
источник
Расширение Visual Studio
Решение, щелкнув правой кнопкой мыши - выберите «Удалить папки bin и obj».
источник