Answers:
重建=清理+构建(通常)
值得注意的细节:
对于多项目解决方案,“重建解决方案”对每个项目执行“清理”,然后执行“构建”(可能并行执行)。而“干净解决方案”之后是“构建解决方案”,则首先清理所有项目(可能并行),然后清理所有项目(可能并行)。当项目间的依赖关系发挥作用时,事件顺序的这种差异会变得很明显。
这三个动作均对应于MSBuild目标。因此,项目可以覆盖“重建”操作以执行完全不同的操作。
伯爵的说法是正确的,即99%的时间重建=清理+重建。
但是不能保证它们是相同的。这3个操作(重建,构建,清除)代表不同的MSBuild目标。每个项目文件都可以覆盖其中的每个文件以执行自定义操作。因此,在启动clean + build(或完全删除它们)之前,某人完全有可能重写rebuild以执行多个操作。
非常极端的情况,但由于评论讨论而指出。
让我们根据默认的Clean和Build实现定义默认的Rebuild实现:
每个项目:重建项目=清理项目+生成项目。
每个解决方案:重建sln = sln中的foreach项目(清洁项目+构建项目)。
请注意,由于执行顺序的不同,Rebuild sln与(Clean sln + Build sln)=(sln Clean项目中的foreach项目)+(sln Build项目中的foreach项目)不同。同样,此“ foreach”可以同时执行,因此在两种情况下允许不同的任务同时运行。
假设您有一个包含proj1,proj2和proj3的sln。
重建sln =(清洁proj1 +构建proj1)&(清洁proj2 +构建proj2)&(清洁proj3 +构建proj3)
清洁Sln +构建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中,(仅通过Google搜索):
Build表示仅编译和链接自上次编译以来已更改的源文件,而Rebuild表示编译和链接所有源文件,无论它们是否已更改。构建是正常的事情,并且更快。有时项目目标组件的版本可能会不同步,因此必须进行重建才能使构建成功。实际上,您不需要清洁。
Build或Rebuild Solution会生成或重建解决方案中的所有项目,而Build或Rebuild会生成或重建Startup项目,在上面的屏幕快照中为“ hello”。要设置启动项目,请在“解决方案资源管理器”选项卡中右键单击所需的项目名称,然后选择“设为启动项目”。项目名称现在以粗体显示。由于作业解决方案通常只有一个项目,因此Build或Rebuild Solution实际上与Build或Rebuild相同。
编译只是编译当前正在编辑的源文件。在其余源文件处于不完整状态时快速检查错误很有用,这会阻止整个项目的成功构建。Ctrl-F7是“编译”的快捷键。