在Visual Studio 2008中只做重建和做清洁 + 构建之间的区别是什么?清洁 + 构建和做清洁 + 重建有区别吗?
重建=清洁+构建(通常)
值得注意的细节:
对于多项目解决方案,“重建解决方案”对每个项目执行“清理”,然后执行“构建”(可能是并行的)。然而,“清洁解决方案”后面跟着“构建解决方案”,首先清理所有项目(可能是并行的),然后构建所有项目(可能是并行的)。当项目间依赖关系开始发挥作用时,事件顺序上的这种差异可能变得非常显著。
所有三个操作都对应于MSBuild目标。因此,项目可以覆盖Rebuild操作来做一些完全不同的事情。
Earl在99%的情况下重建=清洁+构建是正确的。
但不能保证它们是一样的。这3个动作(重建、构建、清除)代表不同的MSBuild目标。每一个都可以被任何项目文件覆盖以执行自定义操作。因此,在启动clean + build(或完全删除它们)之前,完全有可能覆盖rebuild来执行几个操作。
这是一个非常极端的情况,但由于评论讨论而指出了它。
从http://www.cs.tufts.edu/r/graphics/resources/vs_getting_started/vs_getting_started.htm,(只是谷歌它):
Build意味着编译并链接自上次构建以来已经更改的源文件,而Rebuild意味着编译并链接所有源文件,而不管它们是否更改。构建是正常的事情,而且更快。有时项目目标组件的版本可能会不同步,为了使构建成功,必须重新构建。在实践中,你永远不需要Clean。
构建或重建解决方案构建或重建解决方案中的所有项目,而构建或重建则构建或重建StartUp项目,上面的屏幕截图中的“你好”。要设置StartUp项目,请在“解决方案资源管理器”选项卡中右键单击所需的项目名称,并选择“设置为StartUp项目”。项目名称现在以粗体显示。由于作业解决方案通常只有一个项目,因此构建或重建解决方案实际上与构建或重建相同。
Compile只编译当前正在编辑的源文件。当其余源文件处于不完整状态时,可以快速检查错误,这将阻止整个项目的成功构建。Ctrl-F7是编译的快捷键。
让我们根据默认的Clean和Build实现来定义默认的Rebuild实现:
每个项目:重建项目=清理项目+构建项目。
每个解决方案:重建sln = sln中的foreach项目(清洁项目+构建项目)。
注意,由于执行顺序的不同,重建sln与(Clean sln + Build sln) = (sln Clean项目中的foreach项目)+ (sln Build项目中的foreach项目)并不相同。此外,这个“foreach”可以并发执行,因此不同的任务可以在两种场景中并发运行。
假设您有一个包含proj1、proj2和proj3的sln。
重建sln =(清洁项目1 +构建项目1)&(清洁项目2 +建设项目2)&(清洁项目3 +建设项目3)
清洁Sln +构建Sln =(清洁项目1 &清洁项目;清洁项目3)+(构建项目1 &建立项目2 &构建proj3)
+表示串行,&意味着并发。
因此,如果项目依赖项没有正确配置,那么在执行Rebuild sln时,可能会有一些项目链接到一个过时的库。这是因为不能保证在第一次构建开始之前完成所有清理。如果你执行Clean sln + Build sln,他们会给出一个链接错误,并立即让你知道,而不是给你一个有奇怪行为的应用程序。
从作者链接为对这个问题的评论的这篇博文:
其实不! !它们是不平等的。 不同之处在于项目获得清洁和构建的顺序。让 假设我们在一个解决方案中有两个项目。清洁,然后建立意志 对两个项目执行clean,然后将单独进行构建 而在重建时,项目A将获得和清洁,然后再建造 项目B将被清理,然后构建,等等
其实不! !它们是不平等的。
另一个不同之处是:Clean会清除测试资源管理器中的测试结果,而Rebuild不会。
Visual Studio 2022的文档解释说:
Build
Build Solution
Rebuild Solution
Clean Solution
.
这个,以及更多信息,在这里:https://learn.microsoft.com/en-us/visualstudio/ide/building-and-cleaning-projects-and-solutions-in-visual-studio?view=vs-2022