Visual Studio 中的构建解决方案,重建解决方案和清理解决方案之间的区别?

Visual Studio 中的 “生成解决方案”,“重建解决方案” 和 “清理解决方案” 之间有什么区别?

什么时候才是使用这些中的每一种的合适时间?

答案

  • 构建解决方案将执行增量构建:如果它认为不需要重建项目,则不需要。如果未更改,它也可能会使用项目的部分构建的位(我不知道需要花多长时间)
  • 重建解决方案将清除,然后从头开始构建解决方案,而无需理会之前所做的任何事情。与 “先清理,再生成” 的区别在于,“重建” 将一次清理然后生成每个项目,而不是先清理然后再编译。
  • 干净的解决方案将从先前的构建中删除构建工件。如果构建目标目录(bin 和 obj)中还有其他文件,则可能不会将其删除,但实际的构建工件会被移除。我见过这种情况的行为有所不同 - 有时会彻底删除,有时则不会 - 但是我暂时会给 VS 带来疑问的好处:)

(这些链接指向devenv.exe命令行开关,但它们与菜单项的作用相同。)

生成解决方案:编译已更改的代码文件(DLL 和 EXE)。

重建:删除所有编译的文件,然后再次编译它们,而不管代码是否更改。

干净的解决方案:删除所有编译的文件(DLL 和 EXE 文件)。

您可以观看此 YouTube 视频( Visual Studio Build vs. Rebuild vs. Clean(带有答案的 C#面试问题) ),其中我已经证明了它们的区别,下面是直观的表示形式,可以帮助您更详细地分析它们。

构建与重建

Rebuild 与(Clean + Build)之间的区别,因为围绕此似乎也有些混乱:

不同之处在于每个项目的构建和清理顺序发生的方式。假设您的解决方案有两个项目,“proj1” 和 “proj2”。如果您进行重建,它将花费 “proj1”,清理(删除)“proj1” 的编译文件并进行构建。之后,将执行第二个项目 “proj2”,清除 “proj2” 的已编译文件并编译 “proj2”。

但是,如果您进行 “清理” 并 “构建”,它将首先删除 “proj1” 和“proj2” 的所有已编译文件,然后先构建“proj1”,再构建“proj2”。

重建与清洁

取自此链接

Build 表示仅编译和链接自上次编译以来已更改的源文件,而 Rebuild 表示编译和链接所有源文件,无论它们是否已更改。构建是正常的事情,并且更快。有时项目目标组件的版本可能会不同步,因此必须进行重建才能使构建成功。在实践中,您永远不需要清洁。

生成解决方案 - 生成所有已更改文件的程序集。如果装配体没有变化,则不会重建。也不会删除任何中间文件。

最常用。

重建解决方案 - 重建所有程序集,无论更改如何,但保留中间文件。

当您注意到 Visual Studio 没有将所做的更改合并到最新程序集中时使用。有时 Visual Studio 确实会犯错误。

干净的解决方案 - 删除所有中间文件。

当所有其他方法都失败并且需要清理一切并重新开始时使用。

我只是认为 Rebuild 是先执行 Clean,然后是 Build。也许我错了... 评论?

生成解决方案生成所有已更改文件的程序集。如果装配体没有变化,则不会重建。也不会删除任何中间文件。

重建解决方案将清理,然后从头开始构建解决方案,而无需理会之前所做的任何事情

清洁解决方案将从 bin / obj 目录中删除所有编译的文件(即 EXE 和 DLL)。

构建解决方案将构建解决方案中已更改的所有项目。无论如何,重建都会生成所有项目,干净的解决方案会删除所有临时文件,以确保下一个生成完成。

构建解决方案 - 构建解决方案将通过构建许多文件更改的项目来构建您的应用程序。而且它不会清除任何现有的二进制文件,而只会替换 bin 或 obj 文件夹中的更新程序集。

重建解决方案 - 重建解决方案将通过构建您的解决方案中可用的所有项目并清理它们来构建整个应用程序。在构建之前,它将清除 bin 和 obj 文件夹中的所有二进制文件。

清洁解决方案 - 清洁解决方案只是清除 bin 和 obj 文件夹中的所有二进制文件。

我认为人们会忽略的一件事是,构建和清理都是基于 Visual Studio 对项目 / 解决方案的了解而执行的任务。我看到很多抱怨,Clean 无法正常工作或留下剩余文件或不可信,实际上,实际上,您说它不可信的原因实际上使它变得更可信。

清除只会删除(清除)Visual Studio 或编译器本身实际上已创建的文件和 / 或目录。如果您复制自己的文件或从外部工具或源创建的文件 / 文件夹结构,则 Visual Studio 不会 “知道它们存在”,因此,请勿触摸它们。

您能想象清理操作是否基本上执行了 “del *。*”?这可能是灾难性的。

Build对更改或必要的项目执行编译。

无论是否有更改或需要什么, Rebuild 都会执行编译。

Clean会删除过去创建的文件 / 文件夹,但最初会保留所有与它无关的文件 / 文件夹。

我希望这能对您有所帮助。

建立解决方案

这将执行增量构建。换句话说,它将仅构建已更改的代码文件。如果它们没有更改,则这些文件将不会被触摸。

重建解决方案

这将删除所有当前编译的文件(即 exe 和 DLL),并将从头开始构建所有内容,而不管文件中是否存在代码更改。

清洁溶液菜单

此菜单将从 bin / obj 目录中删除所有已编译的文件(即 EXE 和 DLL)。

重建 = 清洁 + 构建