重建和在Visual Studio 2008中执行清理+构建的区别是什么?清理+构建与执行清理+重建不同吗?
重建和在Visual Studio 2008中执行清理+构建的区别是什么?清理+构建与执行清理+重建不同吗?
重建 = 清理 + 构建 (通常如此)
需要注意的细节:
对于多项目解决方案,“重建解决方案”会针对每个项目执行“清理”操作,然后再编译(可能并行进行)。而“清理解决方案”后跟“构建解决方案”则首先清理所有项目(可能并行进行),然后再编译所有项目(可能并行进行)。当涉及到项目间依赖关系时,这些事件序列的差异可能变得非常重要。
所有三个动作都对应于 MSBuild 目标。因此,一个项目可以覆盖重建操作以执行完全不同的操作。
Earl说99%的情况下重构=清除+构建。
但是它们不能保证完全相同。这3个动作(重新构建、构建、清除)代表不同的MSBuild目标。每个项目文件都可以覆盖这些目标,以执行自定义动作。因此,完全有可能某人覆盖重构以在启动清除+构建之前执行多个操作(或完全删除它们)。
这只是一个小概率情况,但由于评论讨论,需要指出。
每个项目:Rebuild项目=清理项目+构建项目。
每个解决方案:Rebuild sln = 对于sln中的每个项目(清理项目+构建项目)。
请注意,由于执行顺序的差异,Rebuild sln并不等同于(Clean sln + Build sln)=(对于sln中的每个项目Clean项目)+(对于sln中的每个项目Build项目)。另外,“foreach”可能会并发执行,因此在两种情况下允许运行不同的任务。
假设您有一个包含proj1、proj2和proj3的sln。
Rebuild sln=(清理proj1+构建proj1)&(清理proj2+构建proj2)&(清理proj3+构建proj3)
Clean Sln + Build Sln=(清理proj1&清理proj2&清理proj3)+(构建proj1&构建proj2&构建proj3)
+表示串行,&表示并发。
因此,如果项目依赖关系未正确配置,则在执行Rebuild sln时,某些项目链接到过时的库的可能性很大。这是因为所有清理都不能保证在第一次构建开始之前完成。如果执行Clean sln + Build sln,它们将会给出链接错误并立即让您知道,而不是给您一个具有奇怪行为的应用程序。
来自http://www.cs.tufts.edu/r/graphics/resources/vs_getting_started/vs_getting_started.htm,(刚才通过谷歌搜索获得):
Build 是编译并链接仅在上次构建后发生更改的源文件,而 Rebuild 是编译和链接所有源文件,无论它们是否发生了更改。通常使用 Build 并且速度更快。有时,项目目标组件的版本可能不同步,需要重新构建以使构建成功。实际上,您从不需要清理。
构建或重建解决方案将构建或重建解决方案中的所有项目,而构建或重建仅会构建或重建启动项目,在上面的屏幕截图中为“hello”。要设置启动项目,请右键单击“解决方案资源管理器”选项卡中所需的项目名称,然后选择“设置为启动项目”。项目名称现在显示为加粗。由于作业解决方案通常只有一个项目,因此构建或重建解决方案实际上与构建或重建相同。
编译只会编译当前正在编辑的源文件。当其余源文件处于无法成功构建整个项目的不完整状态时,可以用于快速检查错误。Ctrl-F7 是编译的快捷键。
Build
或Build Solution
,或按Ctrl+Shift+B,只编译自最近构建以来发生更改的项目文件和组件。当一个解决方案包含多个项目时,Build命令将变为Build Solution。Rebuild Solution
来“清理”解决方案,然后构建所有项目文件和组件。Clean Solution
来删除任何中间文件和输出文件。只留下项目和组件文件,可以构建中间文件和输出文件的新实例。