我想删除所有bin和obj文件夹来强制所有项目重build所有东西

我使用多个项目,我想recursion删除名称为“bin”或“obj”的所有文件夹。 那样的话,我相信所有的项目都会重buildeveryhing(有时候这是迫使visual studio忘记以前版本的唯一方法)。

有没有一个快速的方法来完成这个(例如bat文件),而不必写一个.net程序?

这取决于你喜欢使用的shell。

如果您在Windows上使用cmd shell,那么以下内容应该可以工作:

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或zshtypes的shell(例如Windows或大多数Linux / OS X shell中的git bash或babun),那么这是一个更好,更简洁的方式来执行您想要的操作:

 find . -iname "bin" | xargs rm -rf find . -iname "obj" | xargs rm -rf 

这可以用OR来简化为一行:

 find . -iname "bin" -o -iname "obj" | xargs rm -rf 

如果你使用Powershell,那么你可以使用这个:

 Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse } 

正如罗伯特·H在下面的答案中所看到的那样 – 只要确保你给他的权力的PowerShell的答案,而不是我,如果你select任何投票:)

在安全的地方运行您select的任何命令来testing它当然是明智的!

我发现这个线程,并得到宾果。 更多search打开这个电源shell脚本:

 Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse } 

我以为我会分享,考虑到我在这里找时没有find答案。

这对我工作:

 for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d" 

基于superuser.com上的这个答案

我使用总是添加一个新的目标在我的解决scheme实现这一点。

 <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 

这可以是你的batch file。

 msbuild /t:clean_folders PAUSE 

我写了一个PowerShell脚本来做到这一点。

其优点是打印出已删除文件夹的摘要,如果您指定了要忽略的任何子文件夹层次结构,则会忽略它们。

输出示例

没有为我工作。 我需要删除bin和obj文件夹中的所有文件以进行debugging和发布。 我的解决scheme

1.右键单击项目,卸载,再次右键单击编辑,进入底部

2.插入

 <Target Name="DeleteBinObjFolders" BeforeTargets="Clean"> <RemoveDir Directories="..\..\Publish" /> <RemoveDir Directories=".\bin" /> <RemoveDir Directories="$(BaseIntermediateOutputPath)" /> </Target> 

3.保存,重新加载项目,右键单击清理和presto。

像这样的东西应该以一个非常优雅的方式,在干净的目标之后:

 <Target Name="RemoveObjAndBin" AfterTargets="Clean"> <RemoveDir Directories="$(BaseIntermediateOutputPath)" /> <RemoveDir Directories="$(TargetDir)" /> </Target> 

在build之前删除bin和obj添加到项目文件中:

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

这里是文章: 如何在构build或部署之前删除bin和/或obj文件夹

“干净”不够好? 请注意,您可以使用命令行中的/ t:clean来调用msbuild。

看看CleanProject ,它会删除bin文件夹,obj文件夹,TestResults文件夹和Resharper文件夹。 源代码也可用。

从使用Windows PowerShell删除obj,bin和ReSharper文件夹

非常类似于罗伯特H语法较短的答案

  1. 运行PowerShell
  2. cd (更改目录)到您的项目文件夹的根目录
  3. 粘贴并在脚本下运行

    dir。\ -include bin,obj, resharper * -recurse | foreach($ ){rd $ _。fullname -Recurse -Force}

下面是我给类似的问题的答案 ,简单,容易,工作很好,不需要比Visual Studio已经有的东西还要多。

正如其他人已经回应干净将删除所有构build生成的文物。 但它会留下一切。

如果你在你的MSBuild项目中有一些自定义的话,这可能会给你带来麻烦,并留下一些你认为应该删除的东西。

你可以通过简单的改变你的。* proj来避免这个问题。

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

这将删除当前平台/configuration的bin文件夹中的所有内容。

在我们的构build服务器上,我们通过nant脚本显式删除bin和obj目录。

每个项目构build脚本负责它的输出/临时目录。 这样很好地工作。 所以,当我们改变一个项目并添加一个新的项目时,我们将脚本build立在一个工作脚本的基础上,并且注意到这个删除阶段并处理它。

如果你在逻辑开发机器上执行它,我会坚持通过Visual Studio来清理其他人所提到的。

http://vsclean.codeplex.com/

命令行工具,用于查找Visual Studio解决scheme并在其上运行Clean命令。 这可以让你清理硬盘上所有那些旧项目的/ bin / *目录

你可以实际上采取PSbuild议,并在项目目录中创build一个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参数,所以如果你对第一次运行的列表感到满意,就把它删除。

我其实讨厌乱丢源树的obj文件。 我通常设置项目,以便他们在源码树之外输出obj文件。 对于我通常使用的C#项目

  <IntermediateOutputPath>..\..\obj\$(AssemblyName)\$(Configuration)\</IntermediateOutputPath> 

对于C ++项目

  IntermediateDirectory="..\..\obj\$(ProjectName)\$(ConfigurationName)" 

我们有一个很大的.SLN文件与许多项目文件。 我开始制定一个“ViewLocal”目录,其中包含所有非源代码pipe理文件。 在那个目录里有一个“Inter”和一个“Out”目录。 用于中间文件和输出文件。

这显然可以很容易地进入你的“viewlocal”目录,并做一个简单的删除,摆脱一切。

在花时间研究一下用脚本来解决这个问题之前,你可能会考虑设置类似的东西。

我不会说谎,在一个大型组织中保持这样的设置已经certificate….有趣。 特别是当您使用像QT这样的技术来处理文件并创build非源代码pipe理的源文件时。 但这是一个完整的其他故事!

考虑到PS1文件存在于当前文件夹(您需要删除bin和obj文件夹的文件夹)

 $currentPath = $MyInvocation.MyCommand.Path $currentFolder = Split-Path $currentPath Get-ChildItem $currentFolder -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse } 

与Steve的PowerShell脚本非常相似。 我只是添加TestResults和包,因为它是大多数项目所需要的。

 Get-ChildItem .\ -include bin,obj,packages,TestResults -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse } 

我认为你可以右键点击你的解决scheme/项目,然后点击“清理”button。

据我记得那是这样工作的。 我现在没有我的VS.NET,所以无法testing它。