如果右键单击文件夹,您将看到“清洁”菜单项。我假设这将清理(删除)obj和bin目录。 但是,据我所见,它什么也没做。 还有另外一种方法吗? (请不要告诉我转到Windows资源管理器或cmd.exe) 我想删除obj和bin文件夹,以便我可以轻松压缩整个文件夹。
答案 0 :(得分:84)
正如其他人已经回复的那样,Clean将删除构建生成的所有工件。但它会留下其他一切。
如果您在MSBuild项目中有一些自定义项,这可能会带来麻烦,并留下您认为应删除的内容。
你可以通过在你的。* proj上添加一个简单的更改来解决这个问题:
<Target Name="SpicNSpan"
AfterTargets="Clean">
<RemoveDir Directories="$(OUTDIR)"/>
</Target>
将删除当前平台/配置的bin文件夹中的所有内容。
------编辑 基于Shaman's answer以下的轻微进化(分享投票并给予他一些)
<Target Name="SpicNSpan" AfterTargets="Clean">
<!-- Remove obj folder -->
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<!-- Remove bin folder -->
<RemoveDir Directories="$(BaseOutputPath)" />
</Target>
----再次使用xDisruptor中的部分进行编辑,但我删除了.vs删除,因为这可以更好地在.gitignore(或等效的)中提供
针对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>
如果你有多个项目可以推动这项工作,他还提供了一个很好的建议,让任务更容易部署和维护。
如果你投票这个答案,一定要投票给他们。
答案 1 :(得分:34)
对于Visual Studio 2015,MSBuild变量有所改变:
require_once
请注意,此代码段还会从解决方案的根目录中清除.vs文件夹。如果您认为删除.vs文件夹是一种过度杀伤,则可能需要注释掉关联的行。我启用它是因为我注意到在某些第三方项目中,当.vs文件夹中存在文件ala application.config时会导致问题。
附录:
如果您要优化解决方案的可维护性,可能需要更进一步,并将上面的代码段放在一个单独的文件中,如下所示:
<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>
然后将此文件包含在每个* .csproj文件的最末端,如下所示:
<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文件。< / p>
答案 2 :(得分:29)
要在构建添加到项目文件之前删除bin和obj:
<Target Name="BeforeBuild">
<!-- Remove obj folder -->
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<!-- Remove bin folder -->
<RemoveDir Directories="$(BaseOutputPath)" />
</Target>
以下是文章:How to remove bin and/or obj folder before the build or deploy
答案 3 :(得分:26)
如果你正在使用git并且项目中有正确的.gitignore
,你可以
git clean -xdf --dry-run
绝对删除.gitignore
列表中的每个文件,即它会清除obj
和bin
个文件夹(x
会触发此行为)
答案 4 :(得分:12)
查看Ron Jacobs梦寐以求的开源CleanProject如果你愿意,它甚至可以解决这个问题。
以下是CodePlex link
答案 5 :(得分:9)
此站点: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中的Clean或Rebuild无法捕获时。
对于那些可能不知道的读者,PowerShell支持命令别名,在这里它不会再使用别名重写
Get-ChildItem -inc bin,obj -rec | Remove-Item -rec -force
注意:您应该将其存储在PowerShell文件中,并将该文件放在解决方案的根目录(.sln文件所在的位置),然后在需要正确清理时运行它(不是那个micky mouse VisualStudio可以,并报告成功。)
答案 6 :(得分:2)
Clean将删除构建过程创建的所有中间文件和最终文件,例如.obj文件和.exe或.dll文件。
但是,它不会删除构建这些文件的目录。 我没有看到你需要删除目录的令人信服的理由。 你能进一步解释一下吗?
如果您在“清理”之前和之后查看这些目录,您应该会看到已编译的输出被清除。
答案 7 :(得分:2)
答案 8 :(得分:2)
在Windows中,只需打开资源管理器 导航到您的SLN文件夹 单击进入搜索字段,然后为obj文件夹键入 kind:= folder; obj -> 使用CTRL + A并删除'em-bin相同 完成
不需要任何工具或额外的软件;)
答案 9 :(得分:2)
我无法添加评论(达不到最低声誉)
所以我留下这个答复强调:
&#34; BeforeBuild&#34;使用<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
的操作很棒,但对我而言,与同一项目中包含的实体框架模型相冲突。
我收到的错误是:
Error reading resource '{mymodel}.csdl' -- 'Could not find a part of the path '{myprojectpath}\obj\Release\edmxResourcesToEmbed\{mymodel}.csdl
我想,&#34; edmxResourcesToembed&#34;是在&#34; BeforeBuild&#34;之前创建的。目标行动已经执行。
答案 10 :(得分:2)
您可以在Far Manager中轻松查找和删除 bin 和 obj 文件夹。
在搜索设置对话框中:
搜索完成后,将视图切换为“面板”。
希望它有所帮助。
答案 11 :(得分:2)
它不会删除文件夹,但会删除构建副产品。您是否有理由删除实际的构建文件夹?
答案 12 :(得分:1)
我使用易于理解和可预测的VisualStudioClean。知道它是如何工作的以及它要删除的文件让我感到安心。
以前我试过VSClean(注意VisualStudioClean不是VSClean),VSClean更高级,它有很多配置,有时让我想知道它要删除哪些文件?一个错误的配置将导致我的源代码丢失。测试配置如何工作需要备份我需要花费很多时间的所有项目,所以最后我选择了VisualStudioClean。
结论:VisualStudioClean如果你想要基本的清理,VSClean可以用于更复杂的场景。
答案 13 :(得分:1)
这是我如何使用批处理文件递归删除所有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
答案 14 :(得分:1)
根据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);
}
}
}
}
答案 15 :(得分:0)
我只保存源代码来存储完成的VS项目。
我从所有项目中删除BIN,DEBUG,RELEASE,OBJ,ARM和.vs文件夹。
这大大减少了项目的规模。项目
从存储中取出时必须重新构建。
答案 16 :(得分:0)
只是以上所有好的答案的附录,以防万一有人不知道在VB / C#中将整个过程自动化到zip存档是多么容易。
因此,您只需从模板中获取一个简单的Forms应用程序(如果您还没有家务应用程序),然后向其添加一个按钮,然后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
要记住的一件事是文件系统删除很容易出错。我的最爱之一是当我意识到无法删除文件夹,因为该文件夹包含由Visual Studio在以提升的特权运行时创建的项目(以便调试服务)时。
我需要手动授予权限,或者,我想也应该以提升的特权运行该应用程序。无论哪种方式,我认为在脚本上使用基于GUI的交互式方法都具有一定的价值,特别是因为这很可能是在漫长的一天结束时完成的,因此您不希望以后再发现备份实际上不存在...
答案 17 :(得分:0)
更新: Visual Studio 2019 (在发布前清除[bin]和[obj])。但是我不确定[obj]是否需要删除。请注意,也放置了nuget软件包配置。如果您愿意,可以删除第二行。
<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>
答案 18 :(得分:0)
this answer太好了,我只想评论答案的最后一部分
注意:您应该将其存储在PowerShell文件中,并将其放置在 文件位于解决方案的根目录(.sln文件所在的位置),并且 然后在需要适当清洁时运行它(而不是像 VisualStudio会这样做,并且也会报告成功。)
或者,您可以在个人资料中添加以下内容。ps1
function CleanSolution {
Get-ChildItem -inc bin,obj -rec | Remove-Item -rec -force
}
Set-Alias cs CleanSolution
然后,您可以使用 CleanSolution 或 cs 来运行。这样,您可以将其用于任何项目,而无需文件名的 ./ 前缀