web-dev-qa-db-ja.com

Visual Studioのbinおよびobjフォルダーをクリーニングする方法

フォルダを右クリックすると、「クリーン」メニュー項目が表示されます。これにより、objおよびbinディレクトリがクリーン(削除)されると想定しました。しかし、私が見る限り、それは何もしません。別の方法はありますか? (Windowsエクスプローラーまたはcmd.exeに移動するように指示しないでください)objおよびbinフォルダーを削除して、すべてを簡単にZipできるようにします。

73
tom7

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

MSBuildプロジェクトでカスタマイズを行っている場合、問題が発生し、削除すべきだと思われるものが残る可能性があります。

この問題を回避するには、。* projに簡単な変更を加えて、これを末尾近くに追加します。

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

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

------に基づいてわずかな進化を編集します Shamanの答え 以下(票を共有し、彼にもいくらか与えます)

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

---- xDisruptor からの部分で再度編集しますが、.gitignore(または同等のもの)でより適切に処理されるため、.vs削除を削除しました

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>

彼は、これをプッシュする複数のプロジェクトがある場合、タスクの展開と保守を簡単にするための良い提案も提供します。

この回答に投票する場合は、必ず両方にも投票してください。

89
Newtopian

Visual Studio 2015では、MSBuild変数が少し変更されています。

  <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>

このスニペットは、ソリューションのルートディレクトリから.vsフォルダーも消去することに注意してください。 .vsフォルダーを削除するのがやり過ぎだと思う場合は、関連する行をコメント化することができます。一部のサードパーティのプロジェクトでは、application.configファイルが.vsフォルダー内に存在する場合に問題が発生することに気づいたため、これを有効にしました。

補遺:

ソリューションの保守性を最適化する場合は、さらに一歩進んで、上記のスニペットを次のような別のファイルに配置することをお勧めします。

  <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>

そして、このファイルを* .csprojファイルのすべての最後に含めます:

     [...]
     <Import Project="..\..\Tools\ExtraCleanup.targets"/>
  </Project>

この方法により、改善を行うたびに手動で各* .csprojファイルを手動で編集する手間をかけずに、1か所でエクストラクリーンアップロジックを集中的に強化または微調整できます。

37
XDS

Gitを使用していて、プロジェクトに正しい.gitignoreがある場合、次のことができます。

git clean -xdf --dry-run

.gitignoreリストのすべてのファイルを完全に削除します。つまり、objおよびbinフォルダーをクリーンアップします(xがこの動作をトリガーします)

32
Ruben Bartelink

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

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

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

29
Shaman

Ron Jacobsの素晴らしいオープンソース CleanProject をチェックしてください。

CodePlex link

12
Stuart

このサイト: https://sachabarbs.wordpress.com/2014/10/24/powershell-to-clean-visual-studio-binobj-folders/ はpowershellを使用してbinおよびobjフォルダーを削除します現在のディレクトリとサブディレクトリ。ドライブのルートから実行できるはずですこの記事からの引用は次のとおりです。

ウィリアムズ版はこちら

 gci -inc bin,obj -rec | rm -rec -force

ウィリアムズ自身の言葉で

これにより、現在のディレクトリとすべてのサブディレクトリ内の「bin」ディレクトリと「obj」ディレクトリがすべて消去されます。ワークスペースディレクトリで実行して「クリーン」な状態にすると、特に誰かが台無しになり、IDE内にクリーンまたはリビルドがキャッチされないものがある場合).

読んでいない人のために、PowerShellはコマンドエイリアスをサポートしています。ここではエイリアスを使用せずに書き直されます

Get-ChildItem -inc bin,obj -rec | Remove-Item -rec -force

注:これをPowerShellファイルに保存し、そのファイルをソリューションのルート(.slnファイルが存在する場所)に配置し、適切なクリーンが必要なときに実行する必要があります(VisualStudioが行うミッキーマウスではなく、成功も報告します)。

10
Aran Mulholland

フォルダーは削除されませんが、ビルドの副産物は削除されます。実際のビルドfoldersを削除したい理由はありますか?

2
Christopher

Cleanは、.objファイル、.exe、.dllファイルなど、ビルドプロセスによって作成されたすべての中間ファイルと最終ファイルを削除します。

ただし、これらのファイルが作成されるディレクトリは削除されません。ディレクトリを削除する必要がある理由はわかりません。さらに説明してもらえますか?

「クリーン」の前後にこれらのディレクトリ内を見ると、コンパイルされた出力がクリーンアップされていることがわかります。

2
abelenky

まだコメントを追加できません(最低限の評判はありません)
だからこの返信を下線にして、

<RemoveDir Directories="$(BaseIntermediateOutputPath)" />を使用した "BeforeBuild"アクションは素晴らしいですが、私にとっては、同じプロジェクトに含まれるEntity Frameworkモデルと競合しています。

私が受け取るエラーは次のとおりです。

Error reading resource '{mymodel}.csdl' -- 'Could not find a part of the path '{myprojectpath}\obj\Release\edmxResourcesToEmbed\{mymodel}.csdl

「BeforeBuild」ターゲットアクションが実行される前に、「edmxResourcesToembed」が作成されると思います。

2
Luca Ritossa

Far Managerでbinおよびobjフォルダーを簡単に検索して削除できます。

  1. ソリューションに移動して、Alt + F7を押します
  2. 検索設定ダイアログで:

    • 「bin、obj」と入力フィールド「ファイルマスクまたは複数のファイルマスク」
    • チェックオプション "フォルダの検索"
    • Enterを押す
  3. 検索が完了したら、「パネル」にビューを切り替えます

  4. すべてのファイルを選択し(Ctrl + Aを使用)、フォルダーを削除します( "Shift + Del"を押します)

それが誰かを助けることを願っています。

2
Fragment

これは、バッチファイルを使用して、すべてのBINおよびOBJフォルダーを再帰的に削除する方法です。

  • 空のファイルを作成し、DeleteBinObjFolders.batという名前を付けます
  • 以下のコードをコピーしてDeleteBinObjFolders.batに貼り付けます。
  • ソリューション(* .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

ジョーの答えに基づいて、私はVBコードを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);
            }
        }
    }
}
1
eka808

VisualStudioClean を使用します。これは理解しやすく、予測可能です。どのように機能し、どのファイルを削除するのかを知っていると安心できます。

以前に試した VSClean (VisualStudioCleanはVSCleanではないことに注意)、VSCleanはより高度で、多くの構成があり、どのファイルを削除するのか疑問に思うことがありますか?構成の誤りがあると、ソースコードが失われます。構成がどのように機能するかをテストするには、多くの時間を要するすべてのプロジェクトをバックアップする必要があるため、最終的には代わりにVisualStudioCleanを選択します。

結論:基本的なクリーニングが必要な場合はVisualStudioClean、より複雑なシナリオの場合はVSClean。

1
ComputerMan

ソースコードのみを保存して、完成したVSプロジェクトを保存します。

すべてのプロジェクトからBIN、DEBUG、RELEASE、OBJ、ARMおよび.vsフォルダーを削除します。

これにより、プロジェクトのサイズが大幅に削減されます。プロジェクト

ストレージから引き出したときに再構築する必要があります。

0
pollaris

VB/C#でプロセス全体をZipアーカイブまで自動化することがどれほど簡単かを誰かが理解していない場合に備えて、上記のすべての詳細な回答の補遺です。

したがって、単純なフォームアプリをテンプレートから取得し(ハウスキーピングアプリをまだ持っていない場合)、ボタンを追加してから、特別な設定などを気にせずにClickOnceをデスクトップにインストールします。これは、ボタンに添付する必要があるすべてのコードです。

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

覚えておくべきことの1つは、ファイルシステムの削除が簡単に失敗する可能性があることです。お気に入りの1つは、昇格された特権で実行中にVisual Studioによって作成されたアイテムが含まれているため(サービスをデバッグできるように)フォルダーを削除できないことに気付いたときです。

私は手動で許可を与える必要があったか、または昇格した特権でアプリを実行したと思われます。いずれにせよ、スクリプトを介したインタラクティブなGUIベースのアプローチを使用することにはいくつかの価値があると思います。これは特に長い一日の終わりに行われるものであり、後でそのバックアップを見つけたくないからです。実際には存在しません...

0
saminpa