316

在 Visual Studio 2008 中仅重建和进行Clean + Build有什么区别?Clean + BuildClean + Rebuild不同吗?

4

6 回答 6

320

重建 = 清理 + 构建(通常)

值得注意的细节:

  1. 对于多项目解决方案,“重建解决方案”为每个项目执行“清理”,然后执行“构建”(可能并行)。而“清洁解决方案”后跟“构建解决方案”首先清理所有项目(可能并行),然后构建所有项目(可能并行)。当项目间的依赖关系开始发挥作用时,这种事件顺序的差异会变得很重要。

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

于 2009-08-07T23:41:33.070 回答
167

Earl 是正确的,99% 的时间 Rebuild = Clean + Build。

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

非常极端的案例,但由于评论讨论而指出。

于 2009-08-08T16:03:36.467 回答
63

让我们根据默认的 Clean 和 Build 实现来定义默认的 Rebuild 实现:

  1. 每个项目:重建项目 = 清理项目 + 构建项目。

  2. 每个解决方案:重建 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,他们会给出一个链接错误并立即让你知道,而不是给你一个行为奇怪的应用程序。

于 2012-02-17T03:57:35.623 回答
11

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 是编译的快捷键。

于 2009-08-21T13:10:39.420 回答
4

来自作者链接为对此问题的评论的这篇博客文章

其实没有!!!他们是不平等的。

不同之处在于项目清理和构建的顺序。假设我们在一个解决方案中有两个项目。清理然后构建将对两个项目执行清理,然后构建将单独发生,而在重建项目 A 将获取并清理然后构建,然后项目 B 将被清理然后构建等等。

于 2014-12-15T08:37:46.150 回答
0

另一个区别:Clean 会清除测试资源管理器中的测试结果,而 Rebuild 不会。

于 2021-03-05T14:18:10.167 回答