我与多个项目一起工作,我想递归删除所有名为“bin”或“obj”的文件夹,这样我就可以确保所有项目都会重新构建所有内容(有时这是迫使Visual Studio忘记所有以前的构建的唯一方法)。
是否有一种快速的方法来实现这一点(例如使用.bat文件),而不必编写。net程序?
我与多个项目一起工作,我想递归删除所有名为“bin”或“obj”的文件夹,这样我就可以确保所有项目都会重新构建所有内容(有时这是迫使Visual Studio忘记所有以前的构建的唯一方法)。
是否有一种快速的方法来实现这一点(例如使用.bat文件),而不必编写。net程序?
当前回答
一个非常快速和轻松的方法是使用rimraf npm实用程序,首先全局安装它:
> npm i rimraf -g
然后项目根目录下的命令非常简单(可以保存到脚本文件中):
projectRoot> rimraf **/bin **/obj
为了优化想要的效果,你可以利用文档中指定的项目事件目标(你可以使用的是BeforeRebuild,并让它运行前面的命令):https://learn.microsoft.com/en-us/visualstudio/msbuild/how-to-extend-the-visual-studio-build-process?view=vs-2017
我喜欢rimraf实用程序,因为它是十字板,真的很快。但是,如果您决定使用目标事件选项,也可以在.csproj中使用RemoveDir命令。RemoveDir方法在@Shaman的另一个回答中有很好的解释:https://stackoverflow.com/a/22306653/1534753
其他回答
我讨厌obj文件乱扔源代码树。我通常设置项目,以便它们在源树外输出obj文件。对于我通常使用的c#项目
<IntermediateOutputPath>..\..\obj\$(AssemblyName)\$(Configuration)\</IntermediateOutputPath>
用于c++项目
IntermediateDirectory="..\..\obj\$(ProjectName)\$(ConfigurationName)"
为了达到这个目标,我总是在我的解决方案中添加一个新的目标。
<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
这可以是您的批处理文件。
msbuild /t:clean_folders
PAUSE
我使用.bat文件和这个命令来做到这一点。
for /f %%F in ('dir /b /ad /s ^| findstr /iles "Bin"') do RMDIR /s /q "%%F"
for /f %%F in ('dir /b /ad /s ^| findstr /iles "Obj"') do RMDIR /s /q "%%F"
在添加到项目文件之前删除bin和obj:
<Target Name="BeforeBuild">
<!-- Remove obj folder -->
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<!-- Remove bin folder -->
<RemoveDir Directories="$(BaseOutputPath)" />
</Target>
这是文章:如何删除bin和/或obj文件夹构建或部署之前
看看CleanProject,它会删除bin文件夹,obj文件夹,TestResults文件夹和Resharper文件夹。源代码也可以获得。