Pracuję z wieloma projektami i chcę rekurencyjnie usunąć wszystkie foldery o nazwie „bin” lub „obj” w ten sposób, jestem pewien, że wszystkie projekty odbudują wszystko (czasami jest to jedyny sposób, aby zmusić Visual Studio do zapomnienia o poprzednich kompilacje).
Czy istnieje szybki sposób na osiągnięcie tego (na przykład za pomocą pliku .bat) bez konieczności pisania programu .NET?
visual-studio
visual-studio-2008
batch-file
cmd
MichaelD
źródło
źródło
Odpowiedzi:
To zależy od powłoki, której wolisz używać.
Jeśli używasz powłoki cmd w systemie Windows, powinny działać następujące czynności:
Jeśli używasz powłoki typu bash lub zsh (takiej jak git bash lub babun w systemie Windows lub większości powłok Linux / OS X), jest to o wiele ładniejszy, bardziej zwięzły sposób na robienie tego, co chcesz:
i można to zredukować do jednej linii za pomocą OR:
Zauważ, że jeśli twoje katalogi z nazwami plików zawierają spacje lub cudzysłowy, find wyśle te wpisy bez zmian, które xargs może podzielić na wiele wpisów. Jeśli twoja powłoka je obsługuje
-print0
i-0
obejdzie to niedociągnięcie, więc powyższe przykłady stają się:i:
Jeśli używasz programu PowerShell, możesz użyć tego:
jak widać poniżej w odpowiedzi Roberta H. - upewnij się, że przypisujesz mu odpowiedź Powerhell, a nie mnie, jeśli zdecydujesz się głosować cokolwiek :)
Mądrze byłoby uruchomić najpierw dowolne polecenie, które wybierzesz w bezpiecznym miejscu, aby je przetestować!
źródło
Znalazłem ten wątek i dostałem bingo. Trochę więcej poszukiwań ujawniło ten skrypt powłoki:
Myślałem, że podzielę się, biorąc pod uwagę, że nie znalazłem odpowiedzi, kiedy tu patrzyłem.
źródło
gci -include bin,obj -recurse | remove-item -force -recurse
)-WhatIf
flaga, aby najpierw przetestować, więc skończyłem z tym:$foldersToRemove='bin','obj';[string[]]$foldersToIgnore='ThirdParty';Get-ChildItem .\ -Include $foldersToRemove -Recurse|Where-Object{$_.FullName -inotmatch "\\$($foldersToIgnore -join '|')\\"}|Remove-Item -Force -Recurse -WhatIf
(trochę niechlujny tutaj jako jedna linia :))To działało dla mnie:
Na podstawie tej odpowiedzi na superuser.com
źródło
Zawsze staram się dodawać nowy cel do moich rozwiązań, aby to osiągnąć.
I możesz to nazwać z linii poleceń
To może być twój plik wsadowy.
źródło
Aby to zrobić, napisałem skrypt PowerShell .
Zaletą jest to, że drukuje podsumowanie usuniętych folderów i ignoruje je, jeśli określono hierarchię podfolderów do zignorowania.
źródło
$_ -notmatch 'node_modules'
warunek do$FoldersToRemove
definicji zmiennejNic mi nie działało. Musiałem usunąć wszystkie pliki z folderów bin i obj w celu debugowania i wydania. Moje rozwiązanie:
1. Kliknij projekt prawym przyciskiem myszy, zwolnij, ponownie kliknij prawym przyciskiem myszy edycję, przejdź do dołu
2. Włóż
3. Zapisz, przeładuj projekt, kliknij prawym przyciskiem myszy, wyczyść i presto.
źródło
Coś takiego powinno zrobić to w dość elegancki sposób, po czystym celu:
źródło
Aby usunąć bin i obj przed kompilacją dodaj do pliku projektu:
Oto artykuł: Jak usunąć folder bin i / lub obj przed kompilacją lub wdrożeniem
źródło
Bardzo podobny do skryptów PowerShell Steve'a. Właśnie dodałem TestResults i pakiety, ponieważ jest to potrzebne w większości projektów.
źródło
Spójrz na CleanProject , usunie foldery bin, foldery obj, foldery TestResults i foldery Resharper. Dostępny jest również kod źródłowy.
źródło
za pomocą Windows PowerShell do usuwania folderów obj, bin i ReSharper
bardzo podobny do odpowiedzi Roberta H. z krótszą składnią
wklej i uruchom poniżej skryptu
katalog. \ -include bin, obj, resharper * -recurse | foreach ($ ) {rd $ _. pełna nazwa –Recurse –Force}
źródło
Bardzo szybkim i bezbolesnym sposobem jest użycie
rimraf
narzędzia npm, najpierw zainstaluj go globalnie:A następnie polecenie z katalogu głównego projektu jest dość proste (które można zapisać w pliku skryptu):
Aby zoptymalizować pożądany efekt, możesz wykorzystać cele zdarzenia projektu (tym, którego możesz użyć,
BeforeRebuild
i uruchomić poprzednie polecenie), które są określone w dokumentach: https://docs.microsoft.com/en-us/visualstudio/ msbuild / how-to-extension-the-visual-studio-build-process? view = vs-2017Podoba mi się narzędzie rimraf, ponieważ jest bardzo krzywe i bardzo szybkie. Ale możesz także użyć
RemoveDir
polecenia w .csproj, jeśli zdecydujesz się na opcję zdarzenia docelowego.RemoveDir
Podejście zostało dobrze wyjaśnione w innym odpowiedź tutaj @Shaman: https://stackoverflow.com/a/22306653/1534753źródło
Oto odpowiedź, której udzieliłem na podobne pytanie: proste, łatwe, działa całkiem dobrze i nie wymaga niczego innego niż to, co masz już w Visual Studio.
Gdy inni już odpowiedzieli, Wyczyść usunie wszystkie artefakty generowane przez kompilację. Ale pozostawi po sobie wszystko inne.
Jeśli masz pewne modyfikacje w projekcie MSBuild, może to oznaczać problemy i pozostawić za sobą rzeczy, które Twoim zdaniem powinny zostać usunięte.
Możesz obejść ten problem za pomocą prostej zmiany swojego. * Proj, dodając go gdzieś pod koniec:
Co spowoduje usunięcie wszystkiego z folderu bin bieżącej platformy / konfiguracji.
źródło
To jest mój plik wsadowy, którego używam do rekurencyjnego usuwania wszystkich folderów BIN i OBJ.
źródło
Czy „czyste” nie jest wystarczająco dobre? Zauważ, że możesz wywołać msbuild za pomocą / t: clean z wiersza poleceń.
źródło
Na naszym serwerze kompilacji jawnie usuwamy katalogi bin i obj za pomocą skryptów nant.
Każdy skrypt kompilacji projektu odpowiada za jego katalogi wyjściowe / tymczasowe. Ładnie działa w ten sposób. Kiedy więc zmieniamy projekt i dodajemy nowy, opieramy skrypt na działającym skrypcie, a Ty zauważasz etap usuwania i zajmujesz się nim.
Jeśli robisz to na maszynie do programowania logiki, trzymałbym się czyszczenia za pomocą Visual Studio, jak wspominali inni.
źródło
Nienawidzę plików obj zaśmiecających drzewa źródłowe. Zwykle konfiguruję projekty tak, aby generowały pliki obj poza drzewem źródłowym. W przypadku projektów w języku C # zwykle używam
Dla projektów w C ++
źródło
http://vsclean.codeplex.com/
źródło
Możesz faktycznie pójść dalej z sugestią PS i utworzyć plik vbs w katalogu projektu w następujący sposób:
Dla bezpieczeństwa zawarłem parametr -WhatIf, więc usuń go, jeśli lista jest zadowalająca przy pierwszym uruchomieniu.
źródło
Używam niewielkiej modyfikacji Roberta H, która pomija błędy i drukuje usunięte pliki. I usally również wyczyścić
.vs
,_resharper
ipackage
foldery:Warto również zwrócić uwagę na
git
polecenie, które usuwa wszystkie zmiany, w tym ignorowane pliki i katalogi:źródło
Mamy duże pliki .SLN z wieloma plikami projektów. Założyłem zasadę posiadania katalogu „ViewLocal”, w którym znajdują się wszystkie pliki niekontrolowane przez źródło. Wewnątrz tego katalogu znajduje się katalog „Inter” i „Out”. Odpowiednio dla plików pośrednich i plików wyjściowych.
To oczywiście ułatwia przejście do katalogu „viewlocal” i wykonanie prostego usunięcia, aby się wszystkiego pozbyć.
Zanim poświęcisz czas na znalezienie sposobu obejścia tego problemu za pomocą skryptów, możesz pomyśleć o skonfigurowaniu czegoś podobnego.
Nie będę jednak kłamał, utrzymanie takiej konfiguracji w dużej organizacji okazało się ... interesujące. Zwłaszcza gdy korzystasz z technologii takich jak QT, które lubią przetwarzać pliki i tworzyć pliki źródłowe niekontrolowane przez źródło. Ale to cała INNA historia!
źródło
Biorąc pod uwagę, że plik PS1 jest obecny w bieżącym folderze (folder, w którym należy usunąć foldery bin i obj)
źródło
Do rozwiązania w partii. Używam następującego polecenia:
FOR /D /R %%G in (obj,bin) DO @IF EXIST %%G IF %%~aG geq d RMDIR /S /Q "%%G"
Powód nieużywania
DIR /S /AD /B xxx
1.
DIR /S /AD /B obj
zwróci pustą listę (przynajmniej na moim Windows10) 2. będzie zawierać wynik, którego nie należy się spodziewać (folder tobj)DIR /S /AD /B *obj
źródło
@IF EXIST %%G IF %%~aG geq d
służy do sprawdzania istniejącej ścieżki, a ścieżka jest folderem, a nie plikiem.To działa dobrze dla mnie: start dla / d / r. %% d w (bin, obj, ClientBin, Generated_Code) czy @if istnieje "%% d" rd / s / q "%% d"
źródło
Używam do tego pliku .bat.
źródło
Myślę, że możesz kliknąć prawym przyciskiem myszy swoje rozwiązanie / projekt i kliknąć przycisk „Wyczyść”.
O ile pamiętam, tak to działało. Nie mam teraz mojego VS.NET, więc nie mogę go przetestować.
źródło