我与多个项目一起工作,我想递归删除所有名为“bin”或“obj”的文件夹,这样我就可以确保所有项目都会重新构建所有内容(有时这是迫使Visual Studio忘记所有以前的构建的唯一方法)。
是否有一种快速的方法来实现这一点(例如使用.bat文件),而不必编写。net程序?
我与多个项目一起工作,我想递归删除所有名为“bin”或“obj”的文件夹,这样我就可以确保所有项目都会重新构建所有内容(有时这是迫使Visual Studio忘记所有以前的构建的唯一方法)。
是否有一种快速的方法来实现这一点(例如使用.bat文件),而不必编写。net程序?
当前回答
这对我来说很好: 开始/d /r。%%d in (bin,obj, ClientBin,Generated_Code) do @if exist "%%d" rd /s /q "%%d"
其他回答
注意:这是一个老答案,可能需要在VS 2019和一些obj工件的新版本中进行调整。在使用这种方法之前,请确保VS不需要在目标和输出目录中成功构建任何东西。
像这样的东西应该以一种非常优雅的方式完成,在干净的目标之后:
<Target Name="RemoveObjAndBin" AfterTargets="Clean">
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<RemoveDir Directories="$(TargetDir)" />
</Target>
我讨厌obj文件乱扔源代码树。我通常设置项目,以便它们在源树外输出obj文件。对于我通常使用的c#项目
<IntermediateOutputPath>..\..\obj\$(AssemblyName)\$(Configuration)\</IntermediateOutputPath>
用于c++项目
IntermediateDirectory="..\..\obj\$(ProjectName)\$(ConfigurationName)"
我使用Robert H的轻微修改,跳过错误并打印删除文件。我通常也会清除.vs, _resharper和package文件夹:
Get-ChildItem -include bin,obj,packages,'_ReSharper.Caches','.vs' -Force -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse -ErrorAction SilentlyContinue -Verbose}
另外值得注意的是,git命令清除所有更改,包括忽略的文件和目录:
git clean -dfx
我找到了这条线,然后赢了。再搜索一下就找到了这个power shell脚本:
Get-ChildItem .\ -include bin,obj -Recurse | ForEach-Object ($_) { Remove-Item $_.FullName -Force -Recurse }
或者更简洁:
gci -include bin,obj -recurse | remove-item -force -recurse
考虑到我在这里找不到答案,我想我应该分享一下。
“干净”还不够好吗?注意,您可以使用/t:clean从命令行调用msbuild。