【问题标题】:In Visual Studio, what does the "Clean" command do?在 Visual Studio 中,“清理”命令有什么作用?
【发布时间】:2010-12-08 20:42:22
【问题描述】:

你知道,输出这个的那个=>

----- 干净启动:项目:Foo.Bar,配置:调试任何 CPU ------
========== 清理:1 成功,0 失败,0 跳过 ==========

它在清理什么?

【问题讨论】:

标签: visual-studio build-process


【解决方案1】:

输出目录 - 它删除了之前构建的代码。

它不会删除 bin/obj 目录本身(或它们下面的 Debug/Release 目录),只会删除实际的 .exe、.dll 等文件。不幸的是,这对于我通常使用的清理输出目录的用处不大:当我想压缩源代码时。由于 Clean 操作不这样做,我通常只是直接删除 bin 和 obj 目录。

【讨论】:

  • 最好不要完全删除目录。它对我来说主要是没有意义的,因为 Subversion 具有运行良好的导出命令(至少如果您没有将 bin、obj、*.suo、*.user 等文件添加到存储库中)。但是,是的,很高兴看到这个功能。
  • 有趣的是,在 VS 2013 中,Clean Solution 命令只会影响当前活动的配置(例如:如果您的解决方案设置为 Debug 配置,Clean Solution 不会对发布文件夹)。
  • 有一个名为 CleanProject 的扩展程序,它允许您进行完全清理(删除 bin、obj、...):visualstudiogallery.msdn.microsoft.com/…
  • 请注意,Clean 操作不会删除 CopyLocal 设置为 True 的引用程序集。您可以编辑项目文件以添加执行额外清理的“AfterClean”MSBuild 目标。
  • 我在某处读到它只影响构建输出文件,不包括由其他工具或自定义构建事件创建的文件。对吗?
【解决方案2】:

为什么不自己寻找呢?打开 Microsoft.Common.Targets(位于 %windir%\Microsoft.NET 下),您会看到如下部分:

<!--
============================================================
                                    Clean

Delete all intermediate and final build outputs.
============================================================
-->
<PropertyGroup>
    <CleanDependsOn>
        BeforeClean;
        CleanReferencedProjects;
        UnmanagedUnregistration;
        CoreClean;
        CleanPublishFolder;
        AfterClean
    </CleanDependsOn>
</PropertyGroup>
<Target
    Name="Clean"
    Condition=" '$(_InvalidConfigurationWarning)' != 'true' "
    DependsOnTargets="$(CleanDependsOn)" />

继续阅读以了解每个子目标的确切作用。 (当然,有些只是供用户覆盖的存根)。

就我个人而言,我喜欢看看我的花哨 IDE 在背后搞什么鬼。为此,我建议增加写入输出窗口的信息量。 Tools -> Options -> Projects & Solutions -> Build & Run -> MSBuild verbosity -> 从“Minimal”更改为“Normal”或“Detailed”。

再次尝试您的 Clean 操作并立即观察输出!将您看到的内容与 *.targets 文件相关联是开始学习 MSBuild 的好方法。

【讨论】:

    【解决方案3】:

    它会遍历您的输出目录并删除其中所有与构建相关的文件。

    我认为您也可以通过转到项目的属性来配置它

    配置属性 -> 常规,在“清理时删除的扩展”下

    【讨论】:

    • 我很确定我知道这一点。只是还没有找到一个好的用例,因此 - 忘记了。无法理解如何正确地向谷歌询问。
    • 一个很好的用例是,如果您想压缩您的项目并通过电子邮件将其发送给另一个程序员。它减小了大小,并删除了电子邮件系统不太喜欢的可执行文件。
    • “Extensions to Delete on Clean”仅在 c++ 项目属性中找到,不在托管项目中。
    【解决方案4】:

    删除与构建、输出目录关联的所有文件

    【讨论】:

      【解决方案5】:

      人们使用“清理”来强制从源代码进行完全重建。如果没有更改,您的编译器不会每次都重新构建每个文件。

      【讨论】:

      • 首先要澄清这一点,清洁不会做任何建筑。如果您使用 VS 中的“构建”选项进行后续构建,则清理可确保完整构建。如果您在 Visual Studio 中“重建”,那么所有内容都将被重建,因为无论如何这都会先进行清理。我个人总是重建,以避免潜在的问题。
      • 这应该被接受为答案,因为它给出了真正的原因
      猜你喜欢
      • 2019-11-05
      • 2020-02-04
      • 2010-10-17
      • 1970-01-01
      • 2010-11-25
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      相关资源
      最近更新 更多