Jeśli klikniesz folder prawym przyciskiem myszy, zobaczysz pozycję menu „Wyczyść”. Zakładałem, że to wyczyści (usunie) katalog obj i bin. Jednak o ile widzę, nic nie robi. Czy jest inny sposób? (proszę nie mów mi, żebym przechodził do Eksploratora Windows lub cmd.exe) Chciałbym usunąć foldery obj i bin, aby móc łatwo spakować całość.
visual-studio
msbuild
tom7
źródło
źródło
Odpowiedzi:
Ponieważ inni już odpowiedzieli, program Clean usunie wszystkie artefakty wygenerowane przez kompilację. Ale pozostawi po sobie wszystko inne.
Jeśli masz jakieś dostosowania w projekcie MSBuild, może to oznaczać problemy i pozostawić rzeczy, które Twoim zdaniem powinny zostać usunięte.
Możesz obejść ten problem, wprowadzając prostą zmianę w swoim. * Proj, dodając to gdzieś pod koniec:
<Target Name="SpicNSpan" AfterTargets="Clean"> <RemoveDir Directories="$(OUTDIR)"/> </Target>
Który usunie wszystko z twojego folderu bin dla bieżącej platformy / konfiguracji.
------ Edytuj Niewielka ewolucja w oparciu o odpowiedź szamana poniżej (podziel się głosami i daj mu trochę)
<Target Name="SpicNSpan" AfterTargets="Clean"> <!-- Remove obj folder --> <RemoveDir Directories="$(BaseIntermediateOutputPath)" /> <!-- Remove bin folder --> <RemoveDir Directories="$(BaseOutputPath)" /> </Target>
---- Edytuj ponownie z częściami z xDisruptor, ale usunąłem usunięcie .vs, ponieważ byłoby to lepiej obsługiwane w .gitignore (lub równoważnym)
Zaktualizowano dla 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>
Zapewnia również dobrą sugestię, jak ułatwić wdrażanie i konserwację zadania, jeśli masz wiele projektów, w których możesz to zrobić.
Jeśli zagłosujesz na tę odpowiedź, pamiętaj, aby zagłosować również na nich obu.
źródło
Jeśli używasz gita i masz poprawkę
.gitignore
w swoim projekcie, możeszusunąć absolutnie każdy plik z
.gitignore
listy, tj. wyczyściobj
ibin
foldery (x
wyzwala to zachowanie)źródło
--dry-run
to, że powie ci tylko, co zostanie usunięte. ładneW przypadku programu Visual Studio 2015 zmienne MSBuild nieco się zmieniły:
<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>
Zwróć uwagę, że ten fragment kodu usuwa również folder .vs z katalogu głównego rozwiązania. Możesz skomentować powiązaną linię, jeśli uważasz, że usunięcie folderu .vs jest przesadą. Mam ją włączoną, ponieważ zauważyłem, że w niektórych projektach innych firm powoduje to problemy, gdy pliki ala application.config istnieją w folderze .vs.
Uzupełnienie:
Jeśli chcesz zoptymalizować łatwość utrzymania swoich rozwiązań, możesz pójść o krok dalej i umieścić powyższy fragment w oddzielnym pliku, jak poniżej:
<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>
A następnie dołącz ten plik na samym końcu każdego z Twoich plików * .csproj, w ten sposób:
[...] <Import Project="..\..\Tools\ExtraCleanup.targets"/> </Project>
W ten sposób możesz wzbogacić lub dostroić swoją logikę dodatkowego czyszczenia centralnie, w jednym miejscu, bez konieczności ręcznej edycji każdego pliku * .csproj za każdym razem, gdy chcesz coś ulepszyć.
źródło
Aby usunąć bin i obj przed kompilacją, dodaj do pliku projektu:
<Target Name="BeforeBuild"> <!-- Remove obj folder --> <RemoveDir Directories="$(BaseIntermediateOutputPath)" /> <!-- Remove bin folder --> <RemoveDir Directories="$(BaseOutputPath)" /> </Target>
Oto artykuł: Jak usunąć folder bin i / lub obj przed kompilacją lub wdrożeniem
źródło
Ta witryna: https://sachabarbs.wordpress.com/2014/10/24/powershell-to-clean-visual-studio-binobj-folders/ używa poleceń PowerShell Williama Kempfa do usuwania wszelkich folderów bin i obj z bieżącego katalogu i podkatalogi. Powinno być możliwe uruchomienie go z katalogu głównego dysku.
Oto wersja Williama
Własnymi słowami Williama:
źródło
Sprawdź fantastyczny open source Rona Jacobsa CleanProject. Jeśli chcesz, nawet zajmie się zapinaniem .
Oto link CodePlex
źródło
Możesz łatwo znaleźć i usunąć foldery bin i obj w Far Manager.
W oknie dialogowym ustawień wyszukiwania:
Po zakończeniu wyszukiwania przełącz widok na „Panel” .
Mam nadzieję, że to komuś pomoże.
źródło
W systemie Windows po prostu otwórz eksplorator, przejdź do folderu SLN, kliknij pole wyszukiwania i wpisz kind: = folder; obj -> w przypadku folderów obj użyj CTRL + A i usuń 'em - to samo dla bin Done
Nie potrzeba żadnego narzędzia ani dodatkowego oprogramowania;)
źródło
Nie usuwa folderów, ale usuwa produkty uboczne kompilacji. Czy jest jakiś powód, dla którego chcesz usunąć rzeczywiste foldery kompilacji ?
źródło
Program Clean usunie wszystkie pliki pośrednie i końcowe utworzone w procesie kompilacji, takie jak pliki .obj i .exe lub .dll.
Nie usuwa jednak katalogów, w których te pliki są budowane. Nie widzę przekonującego powodu, dla którego chcesz usunąć katalogi. Czy możesz wyjaśnić więcej?
Jeśli zajrzysz do tych katalogów przed i po „wyczyszczeniu”, powinieneś zobaczyć, jak skompilowane dane wyjściowe zostaną wyczyszczone.
źródło
Nie mogę jeszcze dodać komentarza (nie osiągnięto minimalnej reputacji),
więc zostawiam tę odpowiedź, aby podkreślić, że:
akcja „BeforeBuild”
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
jest świetna, ale dla mnie jest w konflikcie z modelem Entity Framework zawartym w tym samym projekcie.Błąd jaki otrzymuję to:
Przypuszczam, że „edmxResourcesToembed” jest tworzony przed wykonaniem akcji docelowej „BeforeBuild”.
źródło
Na podstawie odpowiedzi Joe przekonwertowałem kod VB na 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); } } } }
źródło
Używam VisualStudioClean, który jest łatwy do zrozumienia i przewidywalny. Wiedząc, jak to działa i jakie pliki ma zamiar usunąć, odciąża mnie.
Wcześniej wypróbowałem VSClean (uwaga: VisualStudioClean to nie VSClean), VSClean jest bardziej zaawansowany, ma wiele konfiguracji, które czasami sprawiają, że zastanawiam się, jakie pliki ma zamiar usunąć? Jedna błędna konfiguracja spowoduje utratę moich kodów źródłowych. Aby sprawdzić, jak będzie działać konfiguracja, należy wykonać kopię zapasową wszystkich moich projektów, co zajmuje dużo czasu, więc ostatecznie wybieram zamiast tego VisualStudioClean.
Wniosek: VisualStudioClean, jeśli potrzebujesz podstawowego czyszczenia, VSClean dla bardziej złożonego scenariusza.
źródło
W ten sposób robię z plikiem wsadowym, aby rekurencyjnie usunąć wszystkie foldery BIN i 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
źródło
Przechowuję gotowe projekty VS, zapisując tylko kod źródłowy.
Usuwam foldery BIN, DEBUG, RELEASE, OBJ, ARM i .vs ze wszystkich projektów.
Zmniejsza to znacznie rozmiar projektu. Projekt
należy odbudować po wyciągnięciu z magazynu.
źródło
To tylko dodatek do wszystkich dobrych odpowiedzi powyżej na wypadek, gdyby ktoś nie zdawał sobie sprawy, jak łatwo jest zautomatyzować cały proces w VB / C #, aż do archiwum zip.
Więc po prostu pobierasz prostą aplikację Forms z szablonów (jeśli nie masz jeszcze aplikacji do sprzątania) i dodajesz do niej przycisk, a następnie ClickOnce instalujesz ją na pulpicie, nie martwiąc się o specjalne ustawienia lub wiele innych rzeczy. To cały kod, który musisz dołączyć do przycisku:
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
Należy pamiętać, że usuwanie systemu plików może łatwo pójść nie tak. Jednym z moich ulubionych było to, gdy zdałem sobie sprawę, że nie mogę usunąć folderu, ponieważ zawierał elementy utworzone przez program Visual Studio podczas pracy z podwyższonymi uprawnieniami (aby móc debugować usługę).
Musiałem ręcznie udzielić pozwolenia lub, jak przypuszczam, uruchomić aplikację również z podwyższonymi uprawnieniami. Tak czy inaczej, myślę, że zastosowanie interaktywnego podejścia opartego na graficznym interfejsie użytkownika zamiast skryptu ma pewną wartość, zwłaszcza że jest to prawdopodobnie coś, co jest wykonywane pod koniec długiego dnia i nie chcesz później dowiedzieć się, że twoja kopia zapasowa tak naprawdę nie istnieje ...
źródło
Aktualizacja: Visual Studio 2019 (Clean [bin] i [obj] przed wydaniem). Jednak nie jestem pewien, czy [obj] musi zostać usunięte. Należy pamiętać, że została również umieszczona konfiguracja pakietu NuGet. Jeśli tak uważasz, możesz usunąć drugą linię.
<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>
źródło
ta odpowiedź jest świetna Chcę tylko skomentować ostatnią część odpowiedzi
Alternatywnie możesz dodać następujące elementy do swojego profilu .ps1
Następnie można użyć CleanSolution lub cs uruchomić. W ten sposób możesz go użyć dla dowolnego projektu i bez przedrostka ./ nazwy pliku
źródło
Rozszerzenie programu Visual Studio
Rozwiązanie dostępne po kliknięciu prawym przyciskiem myszy - wybierz opcję „Usuń foldery bin i obj”
źródło