我想删除所有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语法较短的答案
- 运行PowerShell
- cd (更改目录)到您的项目文件夹的根目录
-
粘贴并在脚本下运行
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来清理其他人所提到的。
命令行工具,用于查找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它。