代码之家  ›  专栏  ›  技术社区  ›  Jim McKeeth

Visual Studio中重建和清理+生成的区别

  •  282
  • Jim McKeeth  · 技术社区  · 16 年前

    仅仅是一个 重建 清洁的 + 清洁的 + 和你做的不同 重建 ?

    5 回复  |  直到 9 年前
        1
  •  318
  •   Jon Coombs    7 年前

    值得注意的细节:

    1. 对于多项目解决方案,“重建解决方案”对每个项目进行“清理”,然后进行“构建”(可能并行)。而“干净的解决方案”之后是“构建解决方案”,首先清理所有项目(可能并行),然后构建所有项目(可能并行)。当项目间的依赖性开始发挥作用时,事件顺序的这种差异可能变得显著。

    2. 这三个操作都对应于MSBuild目标。因此,项目可以覆盖重建操作以执行完全不同的操作。

        2
  •  166
  •   LeopardSkinPillBoxHat    13 年前

    Earl认为99%的时间重建=清理+构建是正确的。

    但它们不能保证是相同的。这3个操作(重建、生成、清理)表示不同的MSBuild目标。每一个都可以被任何项目文件覆盖以执行自定义操作。因此,完全有可能有人在启动clean+构建(或完全删除)之前覆盖rebuild以执行多个操作。

    这是一个非常棘手的问题,但由于评论讨论而指出了这一点。

        3
  •  61
  •   Palec    6 年前

    让我们根据默认清理和生成实现来定义默认重建实现:

    1. 每个项目:重建项目=清理项目+生成项目。

    请注意,由于执行顺序不同,重建sln与(清理sln+构建sln)=(sln清理项目中的foreach项目)+(sln构建项目中的foreach项目)不同。此外,这个“foreach”可以并发执行,因此在这两个场景中允许同时运行不同的任务。

    假设您有一个包含proj1、proj2和proj3的sln。

    • 重建sln=(清洁项目J1+构建项目J1)&(清洁项目J2+构建项目J2)&(清洁项目3+建造项目3)

    • 清洁Sln+构建Sln=(清洁项目J1、清洁项目J2和清洁项目J3)+(构建项目J1、构建项目J2和构建项目J3)

    因此,如果项目依赖项配置不正确,则在执行Rebuild sln时,可能会有一些项目链接到过时的库。这是因为不能保证在第一次构建开始之前完成所有清理。如果你执行Clean sln+Build sln,他们会给出一个链接错误并立即通知你,而不是给你一个行为古怪的应用程序。

        4
  •  11
  •   Eduardo Mello    16 年前

    从…起 http://www.cs.tufts.edu/r/graphics/resources/vs_getting_started/vs_getting_started.htm

    Build意味着只编译和链接自上次生成以来已更改的源文件,而Rebuild意味着编译和链接所有源文件,无论它们是否更改。构建是正常的事情,而且速度更快。有时,项目目标组件的版本可能会不同步,而要使构建成功,必须进行重建。实际上,你永远不需要清洁。

    生成或重建解决方案生成或重建您的解决方案中的所有项目,而生成或重建则生成或重建启动项目,在上面的屏幕截图中显示“hello”。要设置启动项目,请在“解决方案资源管理器”选项卡中的所需项目名称上单击鼠标右键,然后选择“设置为启动项目”。项目名称现在以粗体显示。由于作业解决方案通常只有一个项目,因此构建或重建解决方案实际上与构建或重建解决方案相同。

        5
  •  5
  •   Community Mohan Dere    8 年前

    从…起 this blog post 作者将其链接为 a comment on this question

    其实没有!!!他们不平等。

    区别在于项目清理和构建的顺序。让 假设我们在一个解决方案中有两个项目。清洁然后再建造 重建时,项目A将获得并清理,然后在 该项目B将是干净的,然后建立等等。

        6
  •  0
  •   NoJoshua    4 年前

    另一个区别是:Clean在testexplorer中清除测试结果,而Rebuild不会。