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

时间:2009-08-07 23:32:17

标签: visual-studio visual-studio-2008 build rebuild

在Visual Studio 2008中只执行重建和执行 Clean + Build 之间有什么区别? 清除 + 构建清理 + 重建不同吗?

6 个答案:

答案 0 :(得分:289)

重建=清洁+建造(通常)

值得注意的细节:

  1. 对于多项目解决方案,“重建解决方案”执行“清理”,然后为每个项目执行“构建”(可能并行)。而“清洁解决方案”后跟“构建解决方案”首先清除所有项目(可能并行),然后构建所有项目(可能并行)。当项目间的依赖关系发挥作用时,事件排序的这种差异会变得很大。

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

答案 1 :(得分:160)

伯爵是正确的,99%的时间是Rebuild = Clean + Build。

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

非常一个极端的案例,但由于评论讨论而指出它。

答案 2 :(得分:51)

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

2每个解决方案,重建Sln = foreach项目(清理项目+构建项目)!= Clean Sln + Build Sln

假设您有一个Sln,包含proj1,proj2和proj3。

重建Sln =(Clean proj1 - > Build Proj1)+(Clean proj2 - > Build Proj2)+(Clean proj3 - > Build Proj3)

Clean Sln + Build Sln =(清洁proj1 + Clean proj2 + Clean proj3) - > (构建proj1 + Build proj2 + Build proj3)

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

因此,当您未正确配置项目依赖项时,有可能提交大量代码更改,Rebuild Sln会导致您的某些项目链接到陈旧的lib,因为所有构建都无法保证清理。(在这种情况下,Clean Sln + Build Sln会给出一个链接错误,并立即让你知道,而不是给你一个有奇怪行为的应用程序)

答案 3 :(得分:11)

来自http://www.cs.tufts.edu/r/graphics/resources/vs_getting_started/vs_getting_started.htm,(只是用Google搜索):

构建意味着仅编译和链接自上次构建以来已更改的源文件,而重建意味着编译和链接所有源文件,无论它们是否更改。构建是正常的事情并且更快。有时,项目目标组件的版本可能会失去同步,并且必须进行重建才能使构建成功。在实践中,您永远不需要清洁。

构建或重建解决方案构建或重建解决方案中的所有项目,而Build或Rebuild构建或重建StartUp项目,在上面的屏幕截图中显示“hello”。要设置StartUp项目,请在Solution Explorer选项卡中右键单击所需的项目名称,然后选择Set as StartUp project。项目名称现在以粗体显示。由于家庭作业解决方案通常只有一个项目,因此构建或重建解决方案实际上与构建或重建相同。

编译只编译当前正在编辑的源文件。当其他源文件处于不完整状态时,可以快速检查错误,从而阻止整个项目的成功构建。 Ctrl-F7是编译的快捷键。

答案 4 :(得分:4)

作者this blog post链接的a comment on this question

  

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

     

不同之处在于序列项目变得干净和构建。让   说我们在解决方案中有两个项目。清洁,然后建立意志   对两个项目执行清理,然后单独进行构建   在重建项目时,A将获得并清理,然后在之后构建   项目B将是干净的,然后建立等等。

答案 5 :(得分:0)

另一个区别:Clean 会清除测试资源管理器中的测试结果,而 Rebuild 不会。