フォルダを右クリックすると、「クリーン」メニュー項目が表示されます。これにより、objおよびbinディレクトリがクリーン(削除)されると想定しました。しかし、私が見る限り、それは何もしません。別の方法はありますか? (Windowsエクスプローラーまたはcmd.exeに移動するように指示しないでください)objおよびbinフォルダーを削除して、すべてを簡単にZipできるようにします。
他の人が既に応答しているように、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>
彼は、これをプッシュする複数のプロジェクトがある場合、タスクの展開と保守を簡単にするための良い提案も提供します。
この回答に投票する場合は、必ず両方にも投票してください。
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か所でエクストラクリーンアップロジックを集中的に強化または微調整できます。
Gitを使用していて、プロジェクトに正しい.gitignore
がある場合、次のことができます。
git clean -xdf --dry-run
.gitignore
リストのすべてのファイルを完全に削除します。つまり、obj
およびbin
フォルダーをクリーンアップします(x
がこの動作をトリガーします)
ビルド前にbinとobjを削除してプロジェクトファイルに追加するには:
<Target Name="BeforeBuild">
<!-- Remove obj folder -->
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<!-- Remove bin folder -->
<RemoveDir Directories="$(BaseOutputPath)" />
</Target>
ここに記事があります: ビルドまたはデプロイの前にbinおよび/またはobjフォルダーを削除する方法
Ron Jacobsの素晴らしいオープンソース CleanProject をチェックしてください。
CodePlex link
このサイト: 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が行うミッキーマウスではなく、成功も報告します)。
フォルダーは削除されませんが、ビルドの副産物は削除されます。実際のビルドfoldersを削除したい理由はありますか?
Cleanは、.objファイル、.exe、.dllファイルなど、ビルドプロセスによって作成されたすべての中間ファイルと最終ファイルを削除します。
ただし、これらのファイルが作成されるディレクトリは削除されません。ディレクトリを削除する必要がある理由はわかりません。さらに説明してもらえますか?
「クリーン」の前後にこれらのディレクトリ内を見ると、コンパイルされた出力がクリーンアップされていることがわかります。
まだコメントを追加できません(最低限の評判はありません)
だからこの返信を下線にして、
<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」が作成されると思います。
Far Managerでbinおよびobjフォルダーを簡単に検索して削除できます。
検索設定ダイアログで:
検索が完了したら、「パネル」にビューを切り替えます。
それが誰かを助けることを願っています。
これは、バッチファイルを使用して、すべての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
ジョーの答えに基づいて、私は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);
}
}
}
}
VisualStudioClean を使用します。これは理解しやすく、予測可能です。どのように機能し、どのファイルを削除するのかを知っていると安心できます。
以前に試した VSClean (VisualStudioCleanはVSCleanではないことに注意)、VSCleanはより高度で、多くの構成があり、どのファイルを削除するのか疑問に思うことがありますか?構成の誤りがあると、ソースコードが失われます。構成がどのように機能するかをテストするには、多くの時間を要するすべてのプロジェクトをバックアップする必要があるため、最終的には代わりにVisualStudioCleanを選択します。
結論:基本的なクリーニングが必要な場合はVisualStudioClean、より複雑なシナリオの場合はVSClean。
ソースコードのみを保存して、完成したVSプロジェクトを保存します。
すべてのプロジェクトからBIN、DEBUG、RELEASE、OBJ、ARMおよび.vsフォルダーを削除します。
これにより、プロジェクトのサイズが大幅に削減されます。プロジェクト
ストレージから引き出したときに再構築する必要があります。
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ベースのアプローチを使用することにはいくつかの価値があると思います。これは特に長い一日の終わりに行われるものであり、後でそのバックアップを見つけたくないからです。実際には存在しません...