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

Visual Studio中的构建解决方案、重建解决方案和清洁解决方案有什么区别?

什么时候是使用其中每一个的合适时机?

397519 次浏览

取自此链接

构建意味着仅编译和链接已更改的源文件自上次构建以来,而重建意味着编译并链接所有源文件,无论它们改变与否。构建是正常的要做的事情,而且更快。有时项目目标的版本组件可能会不同步并且重建是必要的使建设成功。在实践中,你从来没有需要清洁

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

构建解决方案-构建任何已更改文件的程序集。如果程序集没有更改,则不会重新构建。也不会删除任何中间文件。

最常用。

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

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

清洁解决方案-删除所有中间文件。

当其他一切都失败了,你需要清理一切,重新开始时使用。

  • 构建解决方案将执行增量构建:如果不是认为,它需要重建一个项目,它就不会。如果项目的部分构建没有改变,它也可能使用它们(我不知道这需要多长时间)
  • 重建解决方案将从头开始清理然后构建解决方案,忽略之前完成的任何工作。这与“清理,然后构建”的区别在于,Rebuild将清理然后构建每个项目,一次一个,而不是清理所有项目然后构建所有项目。
  • 清洁解决方案将从之前的构建中删除构建工件。如果构建目标目录(bin和obj)中有任何其他文件,它们可能不会被删除,但实际的构建工件会被删除。我已经看到这种行为各不相同-有时删除得相当彻底,有时不会-但我暂时给VS怀疑的好处:)

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

我只是认为重建是先执行清洁,然后再执行构建。也许我错了…评论?

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

重建:删除所有已编译文件并再次编译它们,无论代码是否已更改。

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

您可以看到这个YouTube视频(Visual Studio Build vs. Rebuild vs. Clean(带有答案的C#面试问题)),其中我已经演示了差异,下面是可视化表示,这将帮助您更详细地分析相同的内容。

构建vs重建

重建与(清洁+构建)之间的区别,因为围绕这一点似乎也有一些混乱:

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

但是,如果您执行“清理”和“构建”,它将首先删除所有已编译的文件,然后它将首先构建“项目1”,然后是“项目2”。

重建vs清理

构建解决方案仅构建解决方案中已更改的项目,不影响未更改的程序集,

ReBuild首先清除解决方案中的所有程序集,然后构建整个解决方案,而不管所做的更改如何。

清洁,只需清洁溶液。

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

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

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

我认为人们忽略的一件主要事情是,构建和清理都是基于Visual Studio对您的项目/解决方案的了解来执行的任务。我看到很多人抱怨清洁不起作用或留下剩余文件或不值得信赖,而事实上,您说它不值得信赖的原因实际上使它更值得信赖。

Clean只会删除Visual Studio或编译器自己实际创建的文件和/或目录。如果您复制自己的文件或从外部工具或源创建的文件/文件夹结构,则Visual Studio不知道它们存在,因此不应触摸它们。

你能想象如果清洁操作基本上执行了“del *. *" ? 这可能是灾难性的。

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

重建执行编译,无论更改或需要什么。

干净删除它过去创建的文件/文件夹,但最初会留下与它无关的任何内容。

我希望这能说明一点并有所帮助。

我所知道的是一个清洁不做什么“让清洁”用来做-如果我清理一个解决方案,我希望它删除obj和bin文件/文件夹,这样它就像是一个新的签出的源代码。在我的经验中,虽然我经常发现清洁和构建或重建仍然在源代码上产生奇怪的错误已知编译,需要的是手动删除bin/obj文件夹,然后它会构建。

我有一个空白的解决方案BuildRebuildClean和三个类库ModelsRepositoryNotification

我在Notification类库中使用ModelsRepository

然后:

  • 构建解决方案增量构建并仅编译更改的文件。如果程序集没有更改,它不会重新构建。此外,它不会删除任何中间文件。如果修改Models库项目中的某些代码,则构建解决方案。在下面的屏幕截图中,请参阅DLL的时间戳,EXE在ModelsNotification库中更新。

在此处输入图片描述

  • 重建解决方案删除所有编译文件并编译所有文件,无论更改如何,忽略它以前做过的任何事情。右键单击解决方案名称BuildRebuildClean。它的作用是删除所有程序集,要再次编译的EXE和引用文件。

在此处输入图片描述

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

在此处输入图片描述

这仅涉及“构建解决方案”选项。

我完全厌倦了Visual Studio无法真正清理解决方案,并编写了这个小工具来帮助您。

首先在VS中关闭您的解决方案,并将其文件夹从Windows资源管理器拖到此应用程序或其图标中。根据其窗口底部的设置,它还可以删除其他内容,如果您尝试手动将解决方案上传到GitHub或与其他人共享,这将有所帮助:

在此处输入图片描述

简而言之,它会将所有“调试”文件夹、智能感知和其他可以由VS重建的缓存放入回收站。

Clean将清理bin/Debug文件夹中的工件。意味着删除bin/Debug文件夹中的所有文件。

Build检查bin/Debug文件夹中的工件,如果需要,然后创建工件(同时检查构建时错误)。

Rebuild=Clean+Build。这将首先删除bin/Debug文件夹中的所有文件,然后在bin/Debug文件夹中再次创建工件。

可以通过打开和观察bin/Debug(或Release)文件夹,然后清理、构建和重建项目来确认这些操作。

**Build ,Rebuild, Clean Solution**

清洁解决方案:删除所有编译文件(所有dll和exe)。

构建解决方案:编译已更改的代码文件(dll和exe)。

重建解决方案:删除所有已编译的文件并再次编译它们,无论代码是否更改。