我与多个项目一起工作,我想递归删除所有名为“bin”或“obj”的文件夹,这样我就可以确保所有项目都会重新构建所有内容(有时这是迫使Visual Studio忘记所有以前的构建的唯一方法)。
是否有一种快速的方法来实现这一点(例如使用.bat文件),而不必编写。net程序?
我与多个项目一起工作,我想递归删除所有名为“bin”或“obj”的文件夹,这样我就可以确保所有项目都会重新构建所有内容(有时这是迫使Visual Studio忘记所有以前的构建的唯一方法)。
是否有一种快速的方法来实现这一点(例如使用.bat文件),而不必编写。net程序?
当前回答
我写了一个powershell脚本来做这件事。
这样做的好处是,它会打印已删除文件夹的摘要,如果指定要忽略任何子文件夹层次结构,则会忽略那些文件夹。
其他回答
“干净”还不够好吗?注意,您可以使用/t:clean从命令行调用msbuild。
下面是我给类似问题的答案,简单,容易,工作得很好,不需要任何其他东西,除了你已经有Visual Studio。
正如其他人已经回应的那样,Clean将删除所有由构建生成的工件。但它会把一切都抛在脑后。
如果你在你的MSBuild项目中有一些自定义,这可能会带来麻烦,并留下一些你认为应该删除的东西。
你可以通过简单地修改你的。*proj来避免这个问题:
<Target Name="SpicNSpan"
AfterTargets="Clean">
<RemoveDir Directories="$(OUTDIR)"/>
</Target>
这将删除当前平台/配置的bin文件夹中的所有内容。
与Steve的PowerShell脚本非常相似。我只是向它添加了TestResults和包,因为大多数项目都需要它。
Get-ChildItem .\ -include bin,obj,packages,TestResults -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
注意:这是一个老答案,可能需要在VS 2019和一些obj工件的新版本中进行调整。在使用这种方法之前,请确保VS不需要在目标和输出目录中成功构建任何东西。
像这样的东西应该以一种非常优雅的方式完成,在干净的目标之后:
<Target Name="RemoveObjAndBin" AfterTargets="Clean">
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<RemoveDir Directories="$(TargetDir)" />
</Target>
这招对我很管用:
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
根据superuser.com上的答案