2009-08-07 81 views
259

什么只是一个之间的差别重建并做了清洁 + 在Visual Studio 2008中构建?是Clean + Build不同然后做Clean + 重建差异重建和在Visual Studio清洁+构建

+4

[这里是一个不错的职位,详情](http://conceptf1.blogspot.com/2013/11/visual-studio-clean-build-and-rebuild-solution.html) – 2013-11-21 08:36:01

回答

268

重建=清洁+构建

值得注意的细节:

  1. 对于多项目解决方案,“重建解决方案”做一个“干净”的后面是“建”为每个项目(可能在平行下)。鉴于“清洁解决方案”后跟“构建解决方案”首先清理所有项目(可能并行),然后构建所有项目(可能并行)。当项目间依赖关系发挥作用时,事件排序的这种差异可能变得显着。

  2. 所有这三个操作都对应于MSBuild目标。所以一个项目可以重写重建动作来完成一些完全不同的事情。

+1

所以你说* Rebuild * **完全**与* Clean *相同,然后是* Build *?这是我的想法,但我不确定。 – 2009-08-07 23:50:39

+40

除重建清理和逐个重建每个项目外。清洁+构建清理所有这些,然后构建所有这些。大多数情况下,如果你点击它,会造成差异:) – Eugene 2009-08-08 03:35:07

+22

除了没有保证它们是相同的。请参阅下面的JaredPar的答案,与Earl的结合是整个画面。 因为Rebuild轮流执行每个项目,所以当依赖信息混乱并且使用旧项目A得到B的无序生成项目时,可以有一个“角落案例”,然后重建A,然后重建C.等。 。完整的解决方案Clean和完整的解决方案构建将在重建时不会出现这种情况。所以你越是偏执和厌倦,你越应该倾向于Clean Clean Build。 – 2010-01-12 17:44:27

154

厄尔是正确的99%的时间重建=清洁+生成。

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

非常多的角落案件,但由于评论讨论指出。

+0

如果添加将生成的.dll文件移动到新位置的构建操作,则只需执行重建即可生成“错误”生成结果。 如果你将vb.net和c#项目混合在一起,事情会变得更糟糕,破坏​​设计师并且无法实现。 – CodingBarfield 2010-08-24 07:11:00

+0

+1还请注意,重建行为在各种语言方面对于依赖关系似乎并不一致:http://stackoverflow.com/questions/12163080/vs2010-lnk1181-when-rebuilding-project-with-dependency – lesscode 2012-08-28 19:02:52

12

http://www.cs.tufts.edu/r/graphics/resources/vs_getting_started/vs_getting_started.htm,(只是GOOGLE了它):

构建意味着编译和链接只有自上次编译后更改过的源文件,而重建手段编译也不管链接他们是否改变了所有的源文件或不。构建是正常的事情,速度更快。有时,项目目标组件的版本可能会不同步,重建对于构建成功是必要的。在实践中,你永远不需要清洁。

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

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

44

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

2 Per Solution,Rebuild Sln = foreach project(Clean project + Build project)!= Clean Sln + Build Sln

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

重建SLN =(清洁proj1 - >构建Proj1)+(清洁proj2 - >构建Proj2)+(清洁proj3 - >构建Proj3)

清洁SLN +构建SLN =(清洁proj1 +清洁proj2 +清洁proj3) - >(编译proj1 +构建proj2 +构建proj3)

- >表示串口,+意味着并发

所以当你提交了大量的代码更改的机会,而你没有配置做正确的项目依赖关系,重建Sln会导致你的一些proj链接到一个陈旧的lib,因为所有的构建都不能保证在全部清除之后(在这种情况下,Cl EAN SLN +构建SLN会给出一个链接错误,并让你知道,马上的,而不是给你用奇怪的行为的应用程序)

+6

This one是最准确的答案,因为它解释了为什么有时我无法重建,但能够清理+构建。 – 2012-06-27 01:23:12

3

this blog post,作者链接为a comment on this question

其实也没什么! !他们不平等。

不同之处在于顺序项目变得干净和构建。假设 表示我们在解决方案中有两个项目。清理然后编译将 执行清理这两个项目,然后构建将单独发生 而重建项目A将得到并清理,然后构建 项目B将清理,然后构建等。