在 Visual Studio 2008 中仅重建和进行Clean + Build有什么区别?Clean + Build与Clean + Rebuild不同吗?
6 回答
重建 = 清理 + 构建(通常)
值得注意的细节:
对于多项目解决方案,“重建解决方案”为每个项目执行“清理”,然后执行“构建”(可能并行)。而“清洁解决方案”后跟“构建解决方案”首先清理所有项目(可能并行),然后构建所有项目(可能并行)。当项目间的依赖关系开始发挥作用时,这种事件顺序的差异会变得很重要。
所有三个操作都对应于 MSBuild 目标。所以一个项目可以覆盖重建操作来做一些完全不同的事情。
Earl 是正确的,99% 的时间 Rebuild = Clean + Build。
但不能保证它们是相同的。3 个操作(重建、构建、清理)代表不同的 MSBuild 目标。每个项目文件都可以被任何项目文件覆盖以执行自定义操作。因此,在启动 clean + build(或完全删除它们)之前,某人完全有可能覆盖重建以执行多项操作。
非常极端的案例,但由于评论讨论而指出。
让我们根据默认的 Clean 和 Build 实现来定义默认的 Rebuild 实现:
每个项目:重建项目 = 清理项目 + 构建项目。
每个解决方案:重建 sln = sln 中的 foreach 项目(清洁项目 + 构建项目)。
注意,由于执行顺序的不同,Rebuild sln 不等于 (Clean sln + Build sln) = (foreach project in sln Clean project) + (foreach project in sln Build project)。另外,这个“foreach”可能是并发执行的,所以两种场景下允许不同的任务同时运行。
假设您有一个包含 proj1、proj2 和 proj3 的 sln。
重建 sln = (Clean proj1 + Build proj1) & (Clean proj2 + Build proj2) & (Clean proj3 + Build proj3)
Clean Sln + Build Sln = (Clean proj1 & Clean proj2 & Clean proj3) + (Build proj1 & Build proj2 & Build proj3)
+ 表示串行,& 表示并发。
因此,如果项目依赖项配置不正确,当您执行 Rebuild sln 时,您的一些项目可能会链接到一个陈旧的库。这是因为不能保证在第一次构建开始之前完成所有清理。如果你执行 Clean sln + Build sln,他们会给出一个链接错误并立即让你知道,而不是给你一个行为奇怪的应用程序。
从http://www.cs.tufts.edu/r/graphics/resources/vs_getting_started/vs_getting_started.htm,(只是用谷歌搜索):
构建意味着只编译和链接自上次构建以来发生变化的源文件,而重建意味着编译和链接所有源文件,无论它们是否改变。构建是正常的事情,而且速度更快。有时项目目标组件的版本可能会不同步,因此需要重新构建才能使构建成功。在实践中,您永远不需要清洁。
Build or Rebuild Solution 构建或重建解决方案中的所有项目,而 Build 或 Rebuild 构建或重建 StartUp 项目,在上面的屏幕截图中显示“你好”。要设置启动项目,请在解决方案资源管理器选项卡中右键单击所需的项目名称,然后选择设置为启动项目。项目名称现在以粗体显示。由于作业解决方案通常只有一个项目,因此 Build 或 Rebuild Solution 实际上与 Build 或 Rebuild 相同。
编译只是编译当前正在编辑的源文件。当其余源文件处于不完整状态时快速检查错误很有用,这将阻止整个项目的成功构建。Ctrl-F7 是编译的快捷键。
另一个区别:Clean 会清除测试资源管理器中的测试结果,而 Rebuild 不会。