我与多个项目一起工作,我想递归删除所有名为“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”和“bin”文件夹,而是直接在构建过程中将这些文件夹分组在一个方便的位置。

在解决方案文件夹中添加一个Directory.Build.props文件,如下所示:

<Project>
    <PropertyGroup>
        <BaseProjectArtifactPath>$(MSBuildThisFileDirectory).artifacts\$(MSBuildProjectName)</BaseProjectArtifactPath>
        <BaseOutputPath>$(BaseProjectArtifactPath)\bin\</BaseOutputPath>
        <BaseIntermediateOutputPath>$(BaseProjectArtifactPath)\obj\</BaseIntermediateOutputPath>
    </PropertyGroup>
</Project>

现在,所有的“bin”和“obj”文件夹将被创建在解决方案根目录下的一个单独的.artifacts文件夹中,而不是各个项目文件夹中。准备好重新开始了吗?只要删除.artifacts文件夹就可以了。

我使用.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"

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

与Robert H的答案非常相似,只是语法更短

powershell运行 Cd(更改目录)到项目文件夹的根目录 粘贴并运行下面的脚本 Dir .\ -include bin,obj,resharper* -递归| foreach($) {rd $_。fullname -Recurse -Force}

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

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

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

我们有一个大的。sln文件与许多项目文件。我开始了一个“ViewLocal”目录的策略,所有非源代码控制的文件都位于这个目录中。该目录中有一个“Inter”和一个“Out”目录。分别用于中间文件和输出文件。

这显然让你很容易去到你的“viewlocal”目录,做一个简单的删除,以摆脱一切。

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

我不会说谎,在一个大型组织中维持这样的设置已经证明....有趣。特别是当您使用像QT这样的技术来处理文件和创建非源代码控制的源文件时。但那完全是另一回事了!