Visual Studio中Rebuild和Clean + Build之间的区别

Difference between Rebuild and Clean + Build in Visual Studio

在Visual Studio 2008中,只进行重建和执行干净的+生成有什么区别?清除+生成与执行清除+重建不同吗?


重建=清理+构建(通常)

值得注意的细节:

  • 对于多项目解决方案,"重建解决方案"执行"清理",然后为每个项目(可能并行)执行"构建"。而"干净的解决方案"后面跟着"构建解决方案",首先清理所有项目(可能是并行的),然后构建所有项目(可能是并行的)。当项目间依赖性发挥作用时,事件顺序上的这种差异会变得非常显著。

  • 这三个操作都对应于msbuild目标。因此,项目可以重写重建操作来执行完全不同的操作。


  • EARL是正确的,99%的重建时间=清理+建造。

    但它们并不能保证是相同的。这3个操作(rebuild、build、clean)表示不同的msbuild目标。其中每一个都可以被任何项目文件覆盖以执行自定义操作。因此,在开始一个干净+构建(或完全移除它们)之前,完全有可能有人覆盖重建来执行几个操作。

    这是一个很偏颇的案例,但由于评论讨论而指出了这一点。


    每个项目1个,重建项目=(清洁项目+构建项目)。

    每个解决方案2个,rebuild sln=foreach项目(clean project+build project)!=清洁SLN+构建SLN

    假设您有一个SLN,包含Proj1、Proj2和Proj3。

    重建SLN=(clean proj1->build proj1)+(clean proj2->build proj2)+(clean proj3->build proj3)

    clean sln+build sln=(clean proj1+clean proj2+clean proj3)->(build proj1+build proj2+build proj3)

    ->表示串行,+表示并发

    因此,当您在没有正确配置项目依赖项的情况下提交大量代码更改时,rebuild sln可能会导致您中的一些proj链接到过时的lib,因为所有的构建都不能保证在所有清理之后都会被清除。(在这种情况下,clean sln+build sln会给出一个链接错误,并立即通知您,而不是立即给你一个行为怪异的应用)


    从http://www.cs.tufts.edu/r/graphics/resources/vs撔getting_started/vs撔getting_started.htm(只需在谷歌上搜索):

    构建意味着只编译和链接自上次构建以来已更改的源文件,而重建意味着编译和链接所有源文件,不管它们是否更改。构建是正常的事情,而且速度更快。有时,项目目标组件的版本可能不同步,需要重新生成才能使生成成功。实际上,你不需要打扫。

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

    编译只编译当前正在编辑的源文件。当其余的源文件处于不完整状态时,可以快速检查错误,这将阻止整个项目的成功生成。ctrl-f7是编译的快捷键。


    作者将此博客文章链接为对此问题的评论:

    Actually No!!! they are not equal.

    The difference is in the sequence projects get clean and build. Let
    say we have two projects in a solution. Clean and then build will
    perform clean to both projects and then build will occur individually
    while on rebuild project A will get and clean and then build after
    that project B will be clean and then build and so on.