Programing

모든 bin 및 obj 폴더를 삭제하여 모든 프로젝트가 모든 것을 다시 작성하도록하고 싶습니다.

lottogame 2020. 4. 16. 08:13
반응형

모든 bin 및 obj 폴더를 삭제하여 모든 프로젝트가 모든 것을 다시 작성하도록하고 싶습니다.


여러 프로젝트로 작업하고 있으며 이름이 'bin'또는 'obj'인 모든 폴더를 재귀 적으로 삭제하고 싶습니다. 모든 프로젝트가 모든 것을 다시 빌드 할 것이라고 확신합니다 (때로는 Visual Studio가 이전의 모든 것을 잊게하는 유일한 방법입니다) 빌드).

.NET 프로그램을 작성하지 않고도 (예를 들어 .bat 파일을 사용하여)이를 수행하는 빠른 방법이 있습니까?


이것은 사용하려는 쉘에 따라 다릅니다.

Windows에서 cmd 쉘을 사용하는 경우 다음이 작동합니다.

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 유형 셸 (예 : Windows 또는 대부분의 Linux / OS X 셸의 git bash 또는 babun)을 사용하는 경우 원하는 작업을 수행하는 훨씬 더 간결하고 간결한 방법입니다.

find . -iname "bin" | xargs rm -rf
find . -iname "obj" | xargs rm -rf

OR로 한 줄로 줄일 수 있습니다.

find . -iname "bin" -o -iname "obj" | xargs rm -rf

파일 이름 디렉토리에 공백이나 따옴표가 포함되어 있으면 find는 해당 항목을있는 그대로 보내며 xargs는 여러 항목으로 분할 될 수 있습니다. macOS에서 해결 방법은 -print0 및 -0을 사용하여 위의 예제가되는 것입니다.

find . -iname "bin" -print0 | xargs -0 rm -rf
find . -iname "obj" -print0 | xargs -0 rm -rf

과:

find . -iname "bin" -o -iname "obj" -print0 | xargs -0 rm -rf

Powershell을 사용하는 경우 다음을 사용할 수 있습니다.

Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }

아래의 Robert H의 답변 에서 볼 수 있듯이, 당신이 아무것도 투표하지 않으려는 경우 나 대신 powershell 답변에 대한 크레딧을 주어야합니다. :)

물론 안전한 곳에서 선택한 명령을 먼저 테스트하여 실행하는 것이 좋습니다.


나는이 실을 발견하고 빙고를 얻었다. 조금 더 검색하면이 파워 쉘 스크립트가 나타났습니다.

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. 프로젝트를 저장하고 다시로드 한 후 마우스 오른쪽 버튼으로 클릭하고 정리합니다.


그런 목표는 깨끗한 대상 후에 꽤 우아한 방식으로해야합니다.

<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 폴더를 제거하는 방법


Steve의 PowerShell 스크립트와 매우 유사합니다. 대부분의 프로젝트에 필요할 때 TestResults 및 패키지를 추가했습니다.

Get-ChildItem .\ -include bin,obj,packages,TestResults -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }

CleanProject를 보면 bin 폴더, obj 폴더, TestResults 폴더 및 Resharper 폴더가 삭제됩니다. 소스 코드도 제공됩니다.


에서 Windows PowerShell을 사용하여 빈과 ReSharper에서 폴더를 OBJ 제거하기

구문이 짧은 Robert H 답변매우 유사

  1. Powershell을 실행
  2. 프로젝트 폴더의 루트에 cd (change dir)
  3. 붙여 넣기 및 스크립트 아래에서 실행

    dir. \ -bin, obj, resharper * -recurse 포함 | foreach ($ ) {rd $ _. fullname –Recurse –Force}


다음은 비슷한 질문에 대한 대답입니다. 단순하고 쉽게 작동하며 꽤 잘 작동하며 Visual Studio에서 이미 가지고있는 것 이외의 것을 요구하지 않습니다.

다른 사람들이 이미 응답 했으므로 Clean은 빌드에서 생성 된 모든 아티팩트를 제거합니다. 그러나 그것은 다른 모든 것 뒤에 남을 것입니다.

MSBuild 프로젝트에서 일부 사용자 정의가 있으면 문제가 발생하여 삭제해야 할 것으로 남을 수 있습니다.

끝 부분 근처에 이것을 추가하여. * proj를 간단하게 변경 하여이 문제를 피할 수 있습니다.

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

현재 플랫폼 / 구성의 bin 폴더에있는 모든 것을 제거합니다.


'깨끗한'것이 충분하지 않습니까? 명령 줄에서 / t : clean을 사용하여 msbuild를 호출 할 수 있습니다.


빌드 서버에서 nant 스크립트를 통해 bin 및 obj 디렉토리를 명시 적으로 삭제합니다.

각 프로젝트 빌드 스크립트는 출력 / 임시 디렉토리를 담당합니다. 그런 식으로 잘 작동합니다. 따라서 프로젝트를 변경하고 새 프로젝트를 추가하면 스크립트가 작동하는 스크립트를 기반으로하며 삭제 단계를 확인하고 처리합니다.

당신이 당신의 논리 개발 머신에서 그것을하고 있다면, 나는 다른 사람들이 언급했듯이 Visual Studio를 통해 청소를 계속합니다.


http://vsclean.codeplex.com/

Visual Studio 솔루션을 찾아서 Clean 명령을 실행하는 명령 줄 도구입니다. 이를 통해 하드 드라이브에있는 모든 오래된 프로젝트의 / 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 매개 변수를 포함 시켰으므로 처음 실행 한 목록에 만족하면 제거하십시오.


이것은 모든 BIN 및 OBJ 폴더를 재귀 적으로 삭제하는 데 사용하는 배치 파일입니다.

  1. 빈 파일을 작성하고 이름을 DeleteBinObjFolders.bat로 지정하십시오 .
  2. 아래 코드를 DeleteBinObjFolders.bat에 복사하여 붙여 넣기
  3. 솔루션 (* .sln) 파일과 동일한 폴더에서 DeleteBinObjFolders.bat 파일을 이동 하십시오.
@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

Robert H 의 약간의 수정을 사용하여 오류를 건너 뛰고 삭제 파일을 인쇄합니다. 또한 .vs, _resharperpackage폴더를 usally로 지 웁니다 .

Get-ChildItem -include bin,obj,packages,'_ReSharper.Caches','.vs' -Force -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse -ErrorAction SilentlyContinue -Verbose}

git무시할 파일과 디렉토리를 포함한 모든 변경 사항을 지우는 명령 도 주목할 가치가 있습니다.

git clean -dfx

나는 실제로 소스 트리를 어지럽히는 obj 파일을 싫어합니다. 나는 보통 소스 트리 외부에서 obj 파일을 출력하도록 프로젝트를 설정합니다. C # 프로젝트의 경우 일반적으로 사용합니다

 <IntermediateOutputPath>..\..\obj\$(AssemblyName)\$(Configuration)\</IntermediateOutputPath>

C ++ 프로젝트

 IntermediateDirectory="..\..\obj\$(ProjectName)\$(ConfigurationName)"

프로젝트 파일이 많은 큰 .SLN 파일이 있습니다. 모든 비 소스 제어 파일이있는 "ViewLocal"디렉토리를 갖는 정책을 시작했습니다. 그 디렉토리 안에는 'Inter'와 'Out'디렉토리가 있습니다. 중간 파일 및 출력 파일 각각에 대해.

이것은 분명히 'viewlocal'디렉토리로 이동하고 간단한 삭제를 수행하여 모든 것을 제거하기 쉽습니다.

스크립트를 사용하여이 문제를 해결하는 방법을 알아 내기 전에 시간을 투자하기 전에 비슷한 것을 설정하는 것에 대해 생각할 수 있습니다.

그래도 거짓말을하지는 않겠지 만, 대규모 조직에서 그러한 설정을 유지하는 것은 흥미 롭습니다. 특히 파일을 처리하고 비 소스 제어 소스 파일을 생성하는 QT와 같은 기술을 사용하는 경우. 그러나 그것은 전체 다른 이야기입니다!


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 }

배치 솔루션. 다음 명령을 사용하고 있습니다.

FOR /D /R %%G in (obj,bin) DO @IF EXIST %%G IF %%~aG geq d RMDIR /S /Q "%%G"


DIR /S /AD /B xxx
1 DIR /S /AD /B obj사용하지 않는 이유 는 빈 목록을 반환합니다 (적어도 내 Windows10에서는) 2. 예상하지 못한 결과가 포함됩니다 (tobj 폴더)여기에 이미지 설명을 입력하십시오
DIR /S /AD /B *obj여기에 이미지 설명을 입력하십시오


매우 빠르고 쉬운 방법은 rimrafnpm 유틸리티 를 사용하는 것입니다 .

> npm i rimraf -g

그런 다음 프로젝트 루트의 명령은 매우 간단합니다 (스크립트 파일에 저장할 수 있음).

projectRoot> rimraf **/bin **/obj

원하는 효과를 최적화하기 위해 BeforeRebuild문서에 지정된 프로젝트 이벤트 대상 (사용할 수있는 대상을 이전 명령으로 실행)을 활용할 수 있습니다. https://docs.microsoft.com/en-us/visualstudio/ msbuild / 확장 방법 -visual-studio-build-process? view = vs-2017

나는 rimraf 유틸리티가 크로스 플랫폼이고 정말 빠르기 때문에 좋아합니다. 그러나 RemoveDir대상 이벤트 옵션을 사용하기로 결정한 경우 .csproj 에서 명령을 사용할 수도 있습니다 . RemoveDir접근법은 @Shaman의 또 다른 답변에서 잘 설명되어 있습니다 : https : //.com/a/22306653/1534753


이것은 저에게 잘 작동합니다 : / d / r 시작하십시오. (bin, obj, ClientBin, Generated_Code)의 %% d가 @if "%% d"rd / s / q "%% d"인 경우 @


솔루션 / 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 "청소"버튼을 클릭 할 수 있다고 생각합니다.

내가 기억하는 한 그렇게 작동했습니다. VS.NET이 없어서 테스트 할 수 없습니다.

참고 : https://stackoverflow.com/questions/755382/i-want-to-delete-all-bin-and-obj-folders-to-force-all-projects-to-rebuild-everyt

반응형