如何清理Visual Studio bin和obj文件夹

tom*_*om7 78 msbuild visual-studio

如果右键单击文件夹,您将看到"清洁"菜单项.我假设这将清理(删除)obj和bin目录.但是,据我所见,它什么也没做.还有另外一种方法吗?(请不要告诉我转到Windows资源管理器或cmd.exe)我想删除obj和bin文件夹,以便我可以轻松地压缩整个内容.

New*_*ian 92

正如其他人已经回复的那样,Clean将删除构建生成的所有工件.但它会留下其他一切.

如果你在MSBuild项目中有一些自定义,这可能会带来麻烦,并留下你认为应该删除的东西.

你可以通过简单地改变你的.*proj来解决这个问题,方法是将它添加到接近结尾的地方:

<Target Name="SpicNSpan"
        AfterTargets="Clean">
    <RemoveDir Directories="$(OUTDIR)"/>
</Target>
Run Code Online (Sandbox Code Playgroud)

这将删除当前平台/配置的bin文件夹中的所有内容.

------根据下面的萨满答案编辑轻微的进化(分享投票给他一些)

<Target Name="SpicNSpan"  AfterTargets="Clean">
    <!-- Remove obj folder -->
    <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
    <!-- Remove bin folder -->
    <RemoveDir Directories="$(BaseOutputPath)" />
</Target>
Run Code Online (Sandbox Code Playgroud)

----再次使用xDisruptor中的部分进行编辑,但我删除了.vs删除,因为这可以更好地在.gitignore(或等效的)中提供

针对VS 2015进行了更新.

<Target Name="SpicNSpan" AfterTargets="Clean"> <!-- common vars https://msdn.microsoft.com/en-us/library/c02as0cs.aspx?f=255&MSPPError=-2147217396 -->
     <RemoveDir Directories="$(TargetDir)" /> <!-- bin -->
     <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" /> <!-- obj -->
</Target>
Run Code Online (Sandbox Code Playgroud)

如果你有多个项目可以推动这项工作,他还提供了一个很好的建议,让任务更容易部署和维护.

如果你投票这个答案,一定要投票给他们.

  • 这是最好的解决方案,有效,不需要特殊工具,并确保每个团队成员使用相同的"干净"方法.为什么MS Visual Studio无法正常清理对我来说是一个完全的谜. (14认同)
  • @Rolf Visual Studio 默认情况下不会“正确”清理,因为 MS 必须支持 N 个不同项目输出到同一目录的用例。如果默认情况下清理项目会破坏其整个输出目录,则可能会破坏与该项目完全无关的文件。因此,默认行为是跟踪构建过程实际输出的文件,并仅删除干净的这些文件。清理时常见的一类损坏是由于在生成期间创建或复制文件而没有告诉 MSBuild 将其添加到跟踪列表中造成的。 (4认同)

XDS*_*XDS 38

对于Visual Studio 2015,MSBuild变量有所改变:

  <Target Name="SpicNSpan" AfterTargets="Clean"> <!-- common vars https://msdn.microsoft.com/en-us/library/c02as0cs.aspx?f=255&MSPPError=-2147217396 -->
         <RemoveDir Directories="$(TargetDir)" /> <!-- bin -->
         <RemoveDir Directories="$(SolutionDir).vs" /> <!-- .vs -->
         <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" /> <!-- obj -->
  </Target>
Run Code Online (Sandbox Code Playgroud)

请注意,此代码段还会从解决方案的根目录中清除.vs文件夹.如果您认为删除.vs文件夹是一种过度杀伤,则可能需要注释掉关联的行.我启用它是因为我注意到在某些第三方项目中,当.vs文件夹中存在文件ala application.config时会导致问题.

附录:

如果要优化解决方案的可维护性,可能需要更进一步,将上面的代码段放在一个单独的文件中,如下所示:

  <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
       <Target Name="SpicNSpan" AfterTargets="Clean"> <!-- common vars https://msdn.microsoft.com/en-us/library/c02as0cs.aspx?f=255&MSPPError=-2147217396 -->
            <RemoveDir Directories="$(TargetDir)" /> <!-- bin -->
            <RemoveDir Directories="$(SolutionDir).vs" /> <!-- .vs -->
            <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" /> <!-- obj -->
       </Target>
  </Project>
Run Code Online (Sandbox Code Playgroud)

然后将此文件包含在每个*.csproj文件的最末端,如下所示:

     [...]
     <Import Project="..\..\Tools\ExtraCleanup.targets"/>
  </Project>
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以在一个地方集中丰富或微调您的额外清理逻辑,而无需每次想要进行改进时手动编辑每个*.csproj文件.


Rub*_*ink 37

如果您正在使用git并且.gitignore在项目中具有正确性,则可以

git clean -xdf --dry-run
Run Code Online (Sandbox Code Playgroud)

绝对删除.gitignore列表中的每个文件,即它将清理obj,bin文件夹(x触发此行为)

  • 这将删除所有内容,包括 .vs 文件夹、.suo 文件、包文件夹等。通常您不希望这样。我只希望 `bin` 和 `obj` 消失 (3认同)
  • 这很好用。当您想在整个解决方案范围内而不是仅在一个 Visual Studio 项目中进行解决时非常方便 (2认同)
  • 好的。现在我明白了; 关键是`--dry-run`,这只会告诉你将要删除的内容。好的 (2认同)

Sha*_*man 29

要在构建之前删除bin和obj,请添加到项目文件:

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

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

  • 我也喜欢删除中间人的想法,但是在BeforeBuild上挂钩会产生很大的副作用,因为它会消除执行增量构建的所有可能性.在需要花费大量时间来构建的项目中,这是一个节目限制.另外,通过擦除基本输出目录,您可能会干扰可能要执行多目标/配置构建的工具,并在将其打包以进行部署之前累积结果,此处仅执行的最后一次构建将继续存在. (3认同)

Ara*_*and 13

此站点:https://sachabarbs.wordpress.com/2014/10/24/powershell-to-clean-visual-studio-binobj-folders/使用powershell从当前目录和子目录中删除任何bin和obj文件夹.应该可以从驱动器的根目录运行它以下是文章的引用:

这是威廉姆斯版

 gci -inc bin,obj -rec | rm -rec -force
Run Code Online (Sandbox Code Playgroud)

在威廉姆斯自己的话

这会清除当前目录和每个子目录中的所有"bin"和"obj"目录.在您的工作区目录中运行以获得"干净"状态非常有用,特别是当某人搞砸了,并且IDE内部的Clean或Rebuild无法捕获.

对于那些可能不知道的阅读,PowerShell支持命令别名,在这里它不会再使用别名重写

Get-ChildItem -inc bin,obj -rec | Remove-Item -rec -force
Run Code Online (Sandbox Code Playgroud)

注意:您应该将其存储在PowerShell文件中,并将该文件放在解决方案的根目录(.sln文件所在的位置),然后在需要正确清理时运行它(不是VisualStudio所做的micky mouse,并报告成功).


Stu*_*art 12

查看Ron Jacobs梦幻般的开源CleanProject如果你愿意,它甚至可以处理压缩.

这是CodePlex 链接


mkd*_*e99 8

Visual Studio 扩展

在此输入图像描述

右键单击解决方案 - 选择“删除 bin 和 obj 文件夹”


abe*_*nky 2

Clean 将删除构建过程创建的所有中间文件和最终文件,例如 .obj 文件和 .exe 或 .dll 文件。

但是,它不会删除构建这些文件的目录。我没有看到您需要删除目录的令人信服的理由。你能进一步解释一下吗?

如果您在“清理”之前和之后查看这些目录,您应该会看到编译的输出被清理了。

  • “清理”不会删除 .exe。 (5认同)
  • 在 Visual Studio 2010 中,也许如此。现在,我可以确认“干净的解决方案”不会从 Debug/bin 文件夹中删除 dll。 (4认同)
  • 如果文件不是由构建计算的,则 Clean 不会删除它们。如果某些文件通过其他机制传输到 outdir,则 clean 不会删除它们。换句话说,当戴上构建经理的帽子时,清理是完全没有用的,甚至是危险的。 (4认同)

归档时间:

查看次数:

82356 次

最近记录:

6 年 前