私は複数のプロジェクトで作業していますが、「bin」または「obj」という名前のすべてのフォルダーを再帰的に削除したいので、すべてのプロジェクトがすべてを再構築することを確信していますビルド)。
.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を使用して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の回答をクレジットしてください。
もちろん、最初に安全な場所で選択したコマンドを実行してテストすることをお勧めします。
このスレッドを見つけてビンゴを手に入れました。もう少し検索すると、この強力なシェルスクリプトが見つかりました。
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の this answer に基づく
私は、これを達成するために、常にソリューションに新しいターゲットを追加するために使用します。
<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 と書いた。
利点は、削除されたフォルダーの要約を印刷し、無視するサブフォルダー階層を指定した場合はそれらを無視することです。
私には何も機能しませんでした。デバッグおよびリリースのために、binおよびobjフォルダー内のすべてのファイルを削除する必要がありました。私の解決策:
1.プロジェクトを右クリックしてアンロードし、もう一度右クリックして編集し、下に移動します
2.挿入
<Target Name="DeleteBinObjFolders" BeforeTargets="Clean">
<RemoveDir Directories="..\..\Publish" />
<RemoveDir Directories=".\bin" />
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
</Target>
3.プロジェクトを保存してリロードし、「clean and presto」を右クリックします。
そのような何かは、きれいなターゲットの後、かなりエレガントな方法でそれを行う必要があります:
<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フォルダーを削除する方法
CleanProject を見てください。binフォルダー、objフォルダー、TestResultsフォルダー、Resharperフォルダーが削除されます。ソースコードも利用可能です。
SteveのPowerShellスクリプトに非常に似ています。ほとんどのプロジェクトで必要なため、TestResultsとパッケージを追加しました。
Get-ChildItem .\ -include bin,obj,packages,TestResults -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
ここに答えがあります 私は同様の質問に答えました、シンプルで簡単、かなりうまく機能し、Visual Studioですでに持っているもの以外は必要ありません。
他の人が既に応答しているように、Cleanはビルドによって生成されたすべてのアーティファクトを削除します。しかし、それは他のすべてを残します。
MSBuildプロジェクトにいくつかのカスタマイズがある場合、これは問題を引き起こし、削除すべきだと思われるものを残す可能性があります。
。* projに簡単な変更を加えることで、この問題を回避できます。
<Target Name="SpicNSpan"
AfterTargets="Clean">
<RemoveDir Directories="$(OUTDIR)"/>
</Target>
これにより、現在のプラットフォーム/構成のbinフォルダー内のすべてが削除されます。
from Windows PowerShellを使用してobj、bin、ReSharperフォルダーを削除
Robert H answer と非常に似ており、構文が短くなっています
以下のスクリプトを貼り付けて実行します
dir。\ -include bin、obj、resharper * -recurse | foreach($){rd $ _。fullname –Recurse –Force}
ビルドサーバーで、nantスクリプトを使用して、binおよびobjディレクトリを明示的に削除します。
各プロジェクトビルドスクリプトは、そのoutput/tempディレクトリを担当します。そのようにうまく機能します。そのため、プロジェクトを変更して新しいプロジェクトを追加すると、スクリプトは動作中のスクリプトに基づいて作成され、削除段階に気付き、それを処理します。
ロジック開発マシンでそれを行う場合、他の人が述べたように、Visual Studioを使用してクリーンアップすることに固執します。
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
実際に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パラメーターを含めました。最初の実行でリストに満足したら削除します。
Visual Studioソリューションを検出し、それらに対してCleanコマンドを実行するコマンドラインツール。これにより、ハードドライブにある古いプロジェクトすべての/ bin/*ディレクトリをクリーンアップできます。
これは、すべての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
「きれい」では不十分ですか?コマンドラインから/ t:cleanを指定してmsbuildを呼び出すことができます。
私は実際にソースツリーを散らかすobjファイルを嫌います。私は通常、ソースツリーの外部でobjファイルを出力するようにプロジェクトをセットアップします。私が通常使用するC#プロジェクトの場合
<IntermediateOutputPath>..\..\obj\$(AssemblyName)\$(Configuration)\</IntermediateOutputPath>
C++プロジェクトの場合
IntermediateDirectory="..\..\obj\$(ProjectName)\$(ConfigurationName)"
多くのプロジェクトファイルを含む大きな.SLNファイルがあります。私は、ソース管理されていないすべてのファイルが置かれている「ViewLocal」ディレクトリを持つというポリシーを開始しました。そのディレクトリ内には、「Inter」および「Out」ディレクトリがあります。中間ファイルおよび出力ファイルのそれぞれについて。
これにより、明らかに、「viewlocal」ディレクトリに移動して簡単に削除し、すべてを削除することが簡単になります。
スクリプトを使用してこの問題を回避する方法を見つけるのに時間を費やす前に、似たような設定を検討するかもしれません。
私は嘘をつきませんが、大規模な組織でそのような設定を維持することは証明されています...興味深い。特に、ファイルを処理し、ソース管理されていないソースファイルを作成するQTなどのテクノロジーを使用する場合。しかし、それは全く別の話です!
これはうまく動作します:/ d/rから始めます。 (bin、obj、ClientBin、Generated_Code)in%ifd do if if if "%% d" rd/s/q "%% d"
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 }
非常に迅速で簡単な方法は、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