我参与多个项目,想要递归删除所有名称为'bin'或'obj'的文件夹,这样我就可以确定所有项目将重新构建(有时这是强制Visual Studio忘记之前所有构建的唯一方法)。
有没有快速实现这一目标的方法(例如使用.bat文件)而无需编写.NET程序?
我参与多个项目,想要递归删除所有名称为'bin'或'obj'的文件夹,这样我就可以确定所有项目将重新构建(有时这是强制Visual Studio忘记之前所有构建的唯一方法)。
有没有快速实现这一目标的方法(例如使用.bat文件)而无需编写.NET程序?
这是我用来递归删除所有BIN和OBJ文件夹的批处理文件。
@echo off
@echo Deleting all BIN and OBJ folders...
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
@echo BIN and OBJ folders successfully deleted :) Close the window.
pause > nul
cd C:\Git\Workspace
... - James S我使用稍微修改过的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
git clean
命令将删除除根存储库之外的所有内容。如果您只想删除bin和obj文件夹,这可能不是您想要的操作。 - nawfal在 VS 2019/VS 2022
中,这是唯一明智的解决方案。
在解决方案文件夹(即 .sln
文件所在的位置),创建一个名为 Directory.Build.props
的文件,并按下面所示进行编辑。关于这个特殊文件的详细信息可在此处查看。
<Project>
<Target Name="RemoveObjAndBinFolders" AfterTargets="Clean">
<PropertyGroup>
<ObjFolder>$(ProjectDir)$(BaseIntermediateOutputPath)</ObjFolder>
<BinFolder>$(ProjectDir)$(BaseOutputPath)</BinFolder>
<!-- Microsoft.NET.Sdk.Web sets $(BaseIntermediateOutputPath) to -->
<!-- an absolute path. Not fixed up to MsBuild 17! -->
<BaseIntermediateOutputPathFix Condition="$(BaseIntermediateOutputPath.StartsWith($(MSBuildProjectDirectory)))">$([MSBuild]::MakeRelative(
$(ProjectDir),
$(BaseIntermediateOutputPath)
))</BaseIntermediateOutputPathFix>
<ObjFolder Condition="$(BaseIntermediateOutputPath.StartsWith($(MSBuildProjectDirectory)))">$(ProjectDir)$(BaseIntermediateOutputPathFix)</ObjFolder>
</PropertyGroup>
<ItemGroup>
<ObjFiles Include="$(ObjFolder)/*.*"
Exclude="$(ObjFolder)/project.assets.json" />
<ObjSubFolders
Include="$([System.IO.Directory]::GetDirectories('$(ObjFolder)'))" />
</ItemGroup>
<!-- Remove "obj" sub folders -->
<RemoveDir Directories="@(ObjSubFolders)" ContinueOnError="true" />
<!-- Remove "obj" files (keeping necessary asset file)-->
<Delete Files="@(ObjFiles)" />
<!-- Remove "bin" folders -->
<RemoveDir Directories="$(BinFolder)" ContinueOnError="true" />
</Target>
</Project>
project.assets.json
。我已经在我的解决方案中停用了它。需要进行一些改进。 - l33t以上几个解决方案提供了如何排除文件夹的答案,但不是在cmd中。 以下是对Steve Willcock的答案进行扩展,以排除例如node_modules
文件夹,该文件夹可能包含其中的bin
文件夹,可以使用下面扩展的一行代码。
FOR /F "tokens=*" %G IN ('DIR /B /AD /S bin obj ^|find ^"node_modules^" /v /i') DO RMDIR /S /Q "%G"
%%G
替换%G
。%G
替换为 %%G
。 - Louis Somers这里是我对类似问题的回答。简单易懂,效果不错,而且不需要除了 Visual Studio 外的任何其他东西。
正如其他人已经回答的那样,Clean 将删除构建生成的所有工件,但会留下其他一些东西。
如果您在 MSBuild 项目中进行了一些自定义操作,这可能会带来麻烦,并留下应该被删除的东西。
您可以通过在 .*proj 中添加以下内容来解决此问题:
<Target Name="SpicNSpan"
AfterTargets="Clean">
<RemoveDir Directories="$(OUTDIR)"/>
</Target>
这将删除当前平台/配置下bin文件夹中的所有内容。
来自使用Windows PowerShell删除obj、bin和ReSharper文件夹
与Robert H答案非常相似,但语法更短
粘贴并运行以下脚本
dir .\ -include bin,obj,resharper* -recurse | foreach($) { rd $_.fullname –Recurse –Force}
请查看CleanProject,它可以删除bin文件夹、obj文件夹、TestResults文件夹和Resharper文件夹。源代码也是可用的。
我其实很讨厌在源代码树中到处都是obj文件。我通常会设置项目,使它们将obj文件输出到源代码树之外。对于C#项目,我通常使用
<IntermediateOutputPath>..\..\obj\$(AssemblyName)\$(Configuration)\</IntermediateOutputPath>
对于 C++ 项目
IntermediateDirectory="..\..\obj\$(ProjectName)\$(ConfigurationName)"