フォルダを右クリックすると、「クリーン」メニュー項目が表示されます。これにより、objおよびbinディレクトリーがクリーン(削除)されると想定しました。しかし、私が見る限り、何もしません。別の方法はありますか?(Windowsエクスプローラーやcmd.exeに移動するように言わないでください)objとbinフォルダーを削除して、簡単に全体を圧縮できるようにします。
回答:
他の人がすでに応答しているので、Cleanはビルドによって生成されたすべてのアーティファクトを削除します。しかし、それは他のすべてを残します。
MSBuildプロジェクトにいくつかのカスタマイズがある場合、これは問題を引き起こし、削除する必要があると思われるものを残す可能性があります。
。* projを単純に変更してこの問題を回避するには、これを末尾近くのどこかに追加します。
<Target Name="SpicNSpan"
AfterTargets="Clean">
<RemoveDir Directories="$(OUTDIR)"/>
</Target>
これにより、現在のプラットフォーム/構成のbinフォルダー内のすべてが削除されます。
------ 以下のシャーマンの回答に基づいてわずかな進化を編集します(投票を共有し、彼にもいくつか与えます)
<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>
また、これをプッシュするプロジェクトが複数ある場合に、タスクの展開と保守を容易にすることについても良い提案をしています。
この回答に投票する場合は、両方にも投票してください。
gitを使用していて、.gitignore
プロジェクトに正しいものがあれば、次のことができます。
git clean -xdf --dry-run
.gitignore
リストのすべてのファイルを完全に削除します。つまり、、obj
およびbin
フォルダーをクリーンアップします(x
トリガーはこの動作をトリガーします)
--dry-run
。これにより、何が削除されるかがわかります。nice
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つの場所で追加のクリーンアップロジックを一元的に強化または微調整できます。
ビルド前にbinとobjを削除するには、プロジェクトファイルに追加します。
<Target Name="BeforeBuild">
<!-- Remove obj folder -->
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<!-- Remove bin folder -->
<RemoveDir Directories="$(BaseOutputPath)" />
</Target>
このサイト:https : //sachabarbs.wordpress.com/2014/10/24/powershell-to-clean-visual-studio-binobj-folders/は、William Kempfのpowershellコマンドを使用して、現在のディレクトリからbinおよびobjフォルダーを削除し、サブディレクトリ。ドライブのルートから実行できるはずです。
こちらがウィリアムのバージョンです
gci -inc bin,obj -rec | rm -rec -force
ウィリアム自身の言葉で:
これにより、現在のディレクトリおよびすべてのサブディレクトリ内の「bin」および「obj」ディレクトリがすべて消去されます。特に誰かが混乱し、IDE内のCleanまたはRebuildがキャッチしない何かがある場合に、ワークスペースディレクトリで実行して「クリーン」な状態にするのに非常に便利です。
ご存知ないかもしれませんが、PowerShellはコマンドエイリアスをサポートしています。ここでは、エイリアスを使用せずに再度書き換えられます
Get-ChildItem -inc bin,obj -rec | Remove-Item -rec -force
注:これをPowerShellファイルに保存し、そのファイルをソリューションのルート(.slnファイルが存在する場所)に配置し、適切なクリーンアップが必要なときに実行します(VisualStudioが行うミッキーマウスではありません)。成功も報告します)。
Ron Jacobsの素晴らしいオープンソースCleanProjectをチェックしてください。
これはCodePlex リンクです
Far Managerでbinおよびobjフォルダーを簡単に見つけて削除できます。
検索設定ダイアログで:
検索が完了したら、ビューを[パネル]に切り替えます。
それが誰かを助けることを願っています。
フォルダーは削除されませんが、ビルドの副産物は削除されます。実際のビルドフォルダーを削除する理由はありますか?
Cleanは、.objファイルや.exeまたは.dllファイルなど、ビルドプロセスによって作成されたすべての中間ファイルと最終ファイルを削除します。
ただし、これらのファイルがビルドされるディレクトリは削除されません。ディレクトリを削除する必要がある理由がわかりません。さらに説明できますか?
「クリーン」の前後にこれらのディレクトリを見ると、コンパイルされた出力がクリーンアップされていることがわかります。
私はまだコメントを追加することはできません(最小限の評判に達していません)
ので、この返事を残して下線を引きます:
「BeforeBuild」アクション <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
は素晴らしいですが、私にとっては、同じプロジェクトに含まれているEntity Frameworkモデルと競合しています。
私が受け取るエラーは:
Error reading resource '{mymodel}.csdl' -- 'Could not find a part of the path '{myprojectpath}\obj\Release\edmxResourcesToEmbed\{mymodel}.csdl
「BeforeBuild」ターゲットアクションが実行される前に「edmxResourcesToembed」が作成されると思います。
Joeの回答に基づいて、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はより高度なものです。1つの設定ミスにより、ソースコードが失われます。構成がどのように機能するかをテストするには、多くの時間がかかるすべてのプロジェクトをバックアップする必要があるため、結局、代わりにVisualStudioCleanを選択します。
結論:基本的なクリーニングが必要な場合はVisualStudioClean、より複雑なシナリオではVSClean。
これは、バッチファイルを使用してすべての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#で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に基づく対話型のアプローチをスクリプトに使用することにはいくつかの価値があると思います。これは、長い一日の終わりに行われる可能性が高く、後でバックアップを確認したくないためです。実際には存在しません...
更新:Visual Studio 2019(リリース前に[bin]および[obj]をクリーンアップ)。ただし、[obj]を削除する必要があるかどうかはわかりません。nugetパッケージ構成も配置されていることに注意してください。必要に応じて、2行目を削除できます。
<Target Name="PreBuild" BeforeTargets="PreBuildEvent" Condition="'$(Configuration)' == 'Release'">
<!--remove bin-->
<Exec Command="rd /s /q "$(ProjectDir)$(BaseOutputPath)" && ^" />
<!--remove obj-->
<Exec Command="rd /s /q "$(BaseIntermediateOutputPath)Release"" />
</Target>