Answers:
这取决于您喜欢使用的外壳。
如果您在Windows上使用cmd shell,则应能进行以下操作:
FOR /F "tokens=*" %%G IN ('DIR /B /AD /S bin') DO RMDIR /S /Q "%%G"
FOR /F "tokens=*" %%G IN ('DIR /B /AD /S obj') DO RMDIR /S /Q "%%G"
如果您使用的是bash或zsh类型的shell(例如Windows或大多数Linux / OS X shell上的git bash或babun),则这是一种更好,更简洁的方法来执行您想要的操作:
find . -iname "bin" | xargs rm -rf
find . -iname "obj" | xargs rm -rf
并且可以使用OR将其减少为一行:
find . -iname "bin" -o -iname "obj" | xargs rm -rf
请注意,如果您的文件名目录包含空格或引号,则find将按原样发送这些条目,xargs可能会分成多个条目。如果您的外壳支持它们,-print0
并且-0
可以解决此缺点,那么上面的示例将变为:
find . -iname "bin" -print0 | xargs -0 rm -rf
find . -iname "obj" -print0 | xargs -0 rm -rf
和:
find . -iname "bin" -o -iname "obj" -print0 | xargs -0 rm -rf
如果您使用的是Powershell,则可以使用以下命令:
Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
如下面的罗伯特·H(Robert H)的回答所示 -如果您选择投票,请确保您将他归功于Powershell的回答,而不是我。
当然,首先安全地运行您选择的任何命令来测试它是明智的!
我发现此线程并得到宾果游戏。进行了更多搜索之后,看到了以下Power Shell脚本:
Get-ChildItem .\ -include bin,obj -Recurse | ForEach-Object ($_) { Remove-Item $_.FullName -Force -Recurse }
考虑到在看这里时没有找到答案,我想分享一下。
gci -include bin,obj -recurse | remove-item -force -recurse
)
-WhatIf
先测试的标志,所以我最终得到了这一点:($foldersToRemove='bin','obj';[string[]]$foldersToIgnore='ThirdParty';Get-ChildItem .\ -Include $foldersToRemove -Recurse|Where-Object{$_.FullName -inotmatch "\\$($foldersToIgnore -join '|')\\"}|Remove-Item -Force -Recurse -WhatIf
虽然有点混乱,但仅一行:))
我经常在解决方案上添加一个新目标来实现这一目标。
<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
我写了一个Powershell脚本来做到这一点。
这样做的好处是,它会打印出已删除文件夹的摘要,如果指定了要忽略的任何子文件夹层次结构,则会将其忽略。
$_ -notmatch 'node_modules'
条件添加到$FoldersToRemove
变量定义中
什么都没有为我工作。我需要删除bin和obj文件夹中的所有文件以进行调试和发布。我的解决方案:
1.右键单击项目,卸载,再次单击右键编辑,转到底部
2.插入
<Target Name="DeleteBinObjFolders" BeforeTargets="Clean">
<RemoveDir Directories="..\..\Publish" />
<RemoveDir Directories=".\bin" />
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
</Target>
3.保存,重新加载项目,右键单击清理并保存。
要在构建之前删除bin和obj,请添加到项目文件中:
<Target Name="BeforeBuild">
<!-- Remove obj folder -->
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<!-- Remove bin folder -->
<RemoveDir Directories="$(BaseOutputPath)" />
</Target>
看一下CleanProject,它将删除bin文件夹,obj文件夹,TestResults文件夹和Resharper文件夹。源代码也可用。
从使用Windows PowerShell删除OBJ,bin和ReSharper的文件夹
与Robert H答案非常相似,语法较短
粘贴并在脚本下面运行
dir。\-包括bin,obj,resharper * -recurse | foreach($){rd $ _。fullname –Recurse –Force}
一种快速而轻松的方法是使用rimraf
npm实用程序,然后先在全局进行安装:
> npm i rimraf -g
然后,从项目根目录开始的命令非常简单(可以将其保存到脚本文件中):
projectRoot> rimraf **/bin **/obj
为了优化所需的效果,您可以利用BeforeRebuild
在文档中指定的项目事件目标(您可以使用的目标事件目标,并使其运行前面的命令):https : //docs.microsoft.com/zh-cn/visualstudio/ msbuild /如何扩展可视工作室的构建过程?view = vs-2017
我喜欢rimraf实用程序,因为它可以跨平台运行并且非常快捷。但是,RemoveDir
如果决定使用目标事件选项,也可以使用.csproj中的命令。RemoveDir
@Shaman在这里的另一个答案中很好地解释了该方法:https ://stackoverflow.com/a/22306653/1534753
这是我对类似问题“简单,容易” 的回答,效果很好,并且不需要Visual Studio已有的功能。
随着其他人已经做出响应,Clean将删除由构建生成的所有工件。但这会留下其他一切。
如果您在MSBuild项目中进行了一些自定义,这可能会带来麻烦,并留下一些您认为应该删除的内容。
您可以通过对。* proj进行简单更改来解决此问题,方法是在末尾添加以下内容:
<Target Name="SpicNSpan"
AfterTargets="Clean">
<RemoveDir Directories="$(OUTDIR)"/>
</Target>
这将删除当前平台/配置的bin文件夹中的所有内容。
这是我的批处理文件,用于递归删除所有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
“干净”还不够好吗?请注意,您可以从命令行使用/ t:clean调用msbuild。
在构建服务器上,我们通过nant脚本显式删除bin和obj目录。
每个项目构建脚本都对其输出/临时目录负责。这样很好地工作。因此,当我们更改一个项目并添加一个新项目时,我们以工作脚本为基础创建脚本,然后您注意到删除阶段并负责处理。
如果您在逻辑开发机器上执行此操作,那么我会坚持通过Visual Studio进行清理,就像其他人提到的那样。
查找Visual Studio解决方案并在其上运行Clean命令的命令行工具。这使您可以清理硬盘驱动器上所有旧项目的/ bin / *目录
您实际上可以将PS建议更进一步,然后在项目目录中创建一个vbs文件,如下所示:
Option Explicit
Dim oShell, appCmd
Set oShell = CreateObject("WScript.Shell")
appCmd = "powershell -noexit Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse -WhatIf }"
oShell.Run appCmd, 4, false
为了安全起见,我包括了-WhatIf参数,因此,如果您对第一次运行时的列表感到满意,请将其删除。
我对Robert H进行了轻微的修改,跳过了错误并打印了删除文件。我usally也很清楚的.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
考虑到PS1文件存在于currentFolder中(您需要在其中删除bin和obj文件夹的文件夹)
$currentPath = $MyInvocation.MyCommand.Path
$currentFolder = Split-Path $currentPath
Get-ChildItem $currentFolder -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
我认为您可以右键单击您的解决方案/项目,然后单击“清洁”按钮。
据我所记得,它正在那样工作。我现在没有VS.NET,因此无法对其进行测试。