在 Visual Studio 2008 中仅重建和进行 Clean + Build 有什么区别? Clean + Build 与 Clean + Rebuild 不同吗?
重建 = 清理 + 构建(通常)
值得注意的细节:
对于多项目解决方案,“重建解决方案”为每个项目执行“清理”,然后执行“构建”(可能并行)。而“清洁解决方案”后跟“构建解决方案”首先清理所有项目(可能并行),然后构建所有项目(可能并行)。当项目间的依赖关系开始发挥作用时,这种事件顺序的差异会变得很重要。所有三个操作都对应于 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 意味着只编译和链接自上次构建以来发生变化的源文件,而 Rebuild 意味着编译和链接所有源文件,无论它们是否改变。构建是正常的事情,而且速度更快。有时项目目标组件的版本可能会不同步,因此需要重新构建才能使构建成功。在实践中,您永远不需要清洁。
Build or Rebuild Solution 构建或重新构建解决方案中的所有项目,而 Build 或 Rebuild 构建或重新构建 StartUp 项目,在上面的屏幕截图中显示“你好”。要设置启动项目,请在解决方案资源管理器选项卡中右键单击所需的项目名称,然后选择设置为启动项目。项目名称现在以粗体显示。由于作业解决方案通常只有一个项目,因此 Build 或 Rebuild Solution 与 Build 或 Rebuild 实际上相同。
编译只是编译当前正在编辑的源文件。当其余源文件处于不完整状态时快速检查错误很有用,这将阻止整个项目的成功构建。 Ctrl-F7 是编译的快捷键。
来自作者链接为 a comment on this question 的 this blog post:
其实没有!!!他们是不平等的。不同之处在于项目清理和构建的顺序。假设我们在一个解决方案中有两个项目。清理然后构建将对两个项目执行清理,然后构建将单独发生,而在重建项目 A 将获取并清理然后构建,然后项目 B 将被清理然后构建等等。
另一个区别:Clean 会清除测试资源管理器中的测试结果,而 Rebuild 不会。
不定期副业成功案例分享