web-dev-qa-db-ja.com

すべてのプロジェクトですべてを再構築するために、すべてのbinおよびobjフォルダーを削除したい

私は複数のプロジェクトで作業していますが、「bin」または「obj」という名前のすべてのフォルダーを再帰的に削除したいので、すべてのプロジェクトがすべてを再構築することを確信していますビルド)。

.NETプログラムを作成せずに、これを(たとえば.batファイルを使用して)簡単に達成する方法はありますか?

221
MichaelD

これは、使用するシェルによって異なります。

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を使用して1行に減らすことができます。

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 }

下記のロバートHの回答に見られるように -何かを投票することを選択した場合は、私よりも、Powershellの回答をクレジットしてください。

もちろん、最初に安全な場所で選択したコマンドを実行してテストすることをお勧めします。

340
Steve Willcock

このスレッドを見つけてビンゴを手に入れました。もう少し検索すると、この強力なシェルスクリプトが見つかりました。

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

ここを見ていたときに答えが見つからなかったことを考えると、共有したいと思いました。

210
Robert H.

これは私のために働いた:

for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"

Superuser.comの this answer に基づく

64
Daniel Rehner

私は、これを達成するために、常にソリューションに新しいターゲットを追加するために使用します。

<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 script と書いた。

利点は、削除されたフォルダーの要約を印刷し、無視するサブフォルダー階層を指定した場合はそれらを無視することです。

Output example

23
doblak

私には何も機能しませんでした。デバッグおよびリリースのために、binおよびobjフォルダー内のすべてのファイルを削除する必要がありました。私の解決策:

1.プロジェクトを右クリックしてアンロードし、もう一度右クリックして編集し、下に移動します

2.挿入

<Target Name="DeleteBinObjFolders" BeforeTargets="Clean">
  <RemoveDir Directories="..\..\Publish" />
  <RemoveDir Directories=".\bin" />
  <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
</Target>

3.プロジェクトを保存してリロードし、「clean and presto」を右クリックします。

16
Kdefthog

そのような何かは、きれいなターゲットの後、かなりエレガントな方法でそれを行う必要があります:

<Target Name="RemoveObjAndBin" AfterTargets="Clean">
    <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
    <RemoveDir Directories="$(TargetDir)" />
</Target>
13
vezenkov

ビルドの前にbinとobjを削除してプロジェクトファイルに追加するには:

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

ここに記事があります: ビルドまたはデプロイの前にbinおよび/またはobjフォルダーを削除する方法

7
Shaman

CleanProject を見てください。binフォルダー、objフォルダー、TestResultsフォルダー、Resharperフォルダーが削除されます。ソースコードも利用可能です。

3
habakuk

SteveのPowerShellスクリプトに非常に似ています。ほとんどのプロジェクトで必要なため、TestResultsとパッケージを追加しました。

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

ここに答えがあります 私は同様の質問に答えました、シンプルで簡単、かなりうまく機能し、Visual Studioですでに持っているもの以外は必要ありません。

他の人が既に応答しているように、Cleanはビルドによって生成されたすべてのアーティファクトを削除します。しかし、それは他のすべてを残します。

MSBuildプロジェクトにいくつかのカスタマイズがある場合、これは問題を引き起こし、削除すべきだと思われるものを残す可能性があります。

。* projに簡単な変更を加えることで、この問題を回避できます。

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

これにより、現在のプラットフォーム/構成のbinフォルダー内のすべてが削除されます。

2
Newtopian

from Windows PowerShellを使用してobj、bin、ReSharperフォルダーを削除

Robert H answer と非常に似ており、構文が短くなっています

  1. powerShellを実行
  2. cd(dirを変更)プロジェクトフォルダーのルートに
  3. 以下のスクリプトを貼り付けて実行します

    dir。\ -include bin、obj、resharper * -recurse | foreach($){rd $ _。fullname –Recurse –Force}

2
Iman Abidi

ビルドサーバーで、nantスクリプトを使用して、binおよびobjディレクトリを明示的に削除します。

各プロジェクトビルドスクリプトは、そのoutput/tempディレクトリを担当します。そのようにうまく機能します。そのため、プロジェクトを変更して新しいプロジェクトを追加すると、スクリプトは動作中のスクリプトに基づいて作成され、削除段階に気付き、それを処理します。

ロジック開発マシンでそれを行う場合、他の人が述べたように、Visual Studioを使用してクリーンアップすることに固執します。

1
Simeon Pilgrim

Robert H のわずかな変更を使用して、エラーをスキップし、削除ファイルを出力します。通常、.vs_resharper、およびpackageフォルダもクリアします。

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

また、無視するファイルとディレクトリを含むすべての変更をクリアするgitコマンドも注意する価値があります。

git clean -dfx
1
eugstman

実際に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パラメーターを含めました。最初の実行でリストに満足したら削除します。

1
KL XL

http://vsclean.codeplex.com/

Visual Studioソリューションを検出し、それらに対してCleanコマンドを実行するコマンドラインツール。これにより、ハードドライブにある古いプロジェクトすべての/ bin/*ディレクトリをクリーンアップできます。

1
Joel Martinez

これは、すべての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
1
Alper Ebicoglu

「きれい」では不十分ですか?コマンドラインから/ t:cleanを指定してmsbuildを呼び出すことができます。

1
Brian

バッチのソリューション用。私は次のコマンドを使用しています:

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では) enter image description here
2。 DIR /S /AD /B *objには、予期しない結果が含まれます(tobjフォルダー) enter image description here

0
xianyi

私は実際にソースツリーを散らかすobjファイルを嫌います。私は通常、ソースツリーの外部でobjファイルを出力するようにプロジェクトをセットアップします。私が通常使用するC#プロジェクトの場合

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

C++プロジェクトの場合

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

多くのプロジェクトファイルを含む大きな.SLNファイルがあります。私は、ソース管理されていないすべてのファイルが置かれている「ViewLocal」ディレクトリを持つというポリシーを開始しました。そのディレクトリ内には、「Inter」および「Out」ディレクトリがあります。中間ファイルおよび出力ファイルのそれぞれについて。

これにより、明らかに、「viewlocal」ディレクトリに移動して簡単に削除し、すべてを削除することが簡単になります。

スクリプトを使用してこの問題を回避する方法を見つけるのに時間を費やす前に、似たような設定を検討するかもしれません。

私は嘘をつきませんが、大規模な組織でそのような設定を維持することは証明されています...興味深い。特に、ファイルを処理し、ソース管理されていないソースファイルを作成するQTなどのテクノロジーを使用する場合。しかし、それは全く別の話です!

0
pj4533

これはうまく動作します:/ d/rから始めます。 (bin、obj、ClientBin、Generated_Code)in%ifd do if if if "%% d" rd/s/q "%% d"

0
Mudit Sharma

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 }
0
ShivanandSK

非常に迅速で簡単な方法は、rimraf npmユーティリティを使用して、最初にグローバルにインストールすることです。

> npm i rimraf -g

そして、プロジェクトルートからのコマンドは非常に簡単です(スクリプトファイルに保存できます)。

projectRoot> rimraf **/bin **/obj

目的の効果を最適化するには、ドキュメントで指定されているプロジェクトイベントターゲット(使用できるものはBeforeRebuildで、前のコマンドを実行させる)を活用できます。 https://docs.Microsoft .com/en-us/visualstudio/msbuild/how-to-extend-the-visual-studio-build-process?view = vs-2017

Rimrafユーティリティは、クロスプラットフォームで非常に高速なので気に入っています。ただし、ターゲットイベントオプションを使用する場合は、.csprojでRemoveDirコマンドを使用することもできます。 RemoveDirアプローチは、@ Shamanによる別の回答で詳しく説明されています。 https://stackoverflow.com/a/22306653/153475

0
Vedran Mandić