我与多个项目一起工作,我想递归删除所有名为“bin”或“obj”的文件夹,这样我就可以确保所有项目都会重新构建所有内容(有时这是迫使Visual Studio忘记所有以前的构建的唯一方法)。
是否有一种快速的方法来实现这一点(例如使用.bat文件),而不必编写。net程序?
我与多个项目一起工作,我想递归删除所有名为“bin”或“obj”的文件夹,这样我就可以确保所有项目都会重新构建所有内容(有时这是迫使Visual Studio忘记所有以前的构建的唯一方法)。
是否有一种快速的方法来实现这一点(例如使用.bat文件),而不必编写。net程序?
当前回答
从使用Windows PowerShell删除obj, bin和ReSharper文件夹
与Robert H的答案非常相似,只是语法更短
powershell运行 Cd(更改目录)到项目文件夹的根目录 粘贴并运行下面的脚本 Dir .\ -include bin,obj,resharper* -递归| foreach($) {rd $_。fullname -Recurse -Force}
其他回答
我使用.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"
用于批量解决方案。我正在使用以下命令:
FOR /D /R %%G in (obj,bin) DO @IF EXIST %%G IF %%~aG geq D RMDIR /S /Q "%%G"
不使用DIR /S /AD /B xxx的原因 1. DIR /S /AD /B obj将返回空列表(至少在我的Windows10上) 2. DIR /S /AD /B *obj将包含非预期的结果(tobj文件夹)
对我来说什么都没用。我需要删除bin和obj文件夹中的所有文件进行调试和发布。我的解决方案:
1.右击项目,卸载,右击再次编辑,到底部
2.插入
<Target Name="DeleteBinObjFolders" BeforeTargets="Clean">
<RemoveDir Directories="..\..\Publish" />
<RemoveDir Directories=".\bin" />
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
</Target>
3.保存,重新加载项目,右键单击清洁和立即。
一个非常快速和轻松的方法是使用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
在VS 2019/VS 2022中,这是唯一明智的解决方案。
在解决方案文件夹(.sln文件所在的位置)中,创建一个名为Directory.Build.props的文件,并按如下所示添加编辑它。在这里阅读这个特殊的文件。
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>
不需要修改一堆.csproj文件。另外,请注意,我并没有像一些人建议的那样删除$(TargetDir)。如果$(OutDir)被设置为某个自定义目录(一种常见的做法),那么这样做可能会使构建系统瘫痪。