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

什么时候使用这些工具比较合适?


摘自此链接:

构建意味着只编译和链接已更改的源文件 从上次构建开始,而重新构建 意味着编译和链接所有源代码 文件,不管它们是否 改变与否。构建是常态 要做的事情,而且更快。有时 项目目标的版本 组件可能会不同步 重建是进行构建所必需的 成功的。在实践中,你永远不会 需要清洁。


构建解决方案将构建解决方案中已更改的任何项目。重建构建所有项目,清洁解决方案删除所有临时文件,确保下一次构建完成。


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

最常用的。

重新构建解决方案——无论发生什么更改,都重新构建所有程序集,但保留中间文件。

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

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

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


Build solution will perform an incremental build: if it doesn't think it needs to rebuild a project, it won't. It may also use partially-built bits of the project if they haven't changed (I don't know how far it takes this) Rebuild solution will clean and then build the solution from scratch, ignoring anything it's done before. The difference between this and "Clean, followed by Build" is that Rebuild will clean-then-build each project, one at a time, rather than cleaning all and then building all. Clean solution will remove the build artifacts from the previous build. If there are any other files in the build target directories (bin and obj) they may not be removed, but actual build artifacts are. I've seen behaviour for this vary - sometimes deleting fairly thoroughly and sometimes not - but I'll give VS the benefit of the doubt for the moment :)

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


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


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

重建:删除所有编译过的文件,并重新编译它们,不管代码是否更改。

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

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

重建和(清洁+构建)之间的区别,因为这似乎也有一些困惑:

不同之处在于每个项目的构建和清理序列发生的方式。假设您的解决方案有两个项目,“proj1”和“proj2”。如果你重新构建,它将使用“proj1”,清除(删除)“proj1”的编译文件并构建它。之后,它将获取第二个项目“proj2”,清理“proj2”的编译文件并编译“proj2”。

但是如果你做了“清理”和“构建”,它将首先删除“proj1”和“proj2”的所有编译文件,然后它将首先构建“proj1”,然后是“proj2”。


生成解决方案只生成解决方案中已更改的项目,而不影响未更改的程序集,

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

清洁,简单地清洗溶液。


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

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

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


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

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

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

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

不管更改或需要什么,Rebuild都会执行编译。

Clean会删除过去创建的文件/文件夹,但会保留最初与之无关的任何内容。

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


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


我有一个空白的解决方案BuildRebuildClean和三个类库模型,存储库,通知。

我在通知类库中使用模型和库。

然后:

生成解决方案增量生成,只编译已更改的文件。如果一个程序集没有变化, 它不会被重建。此外,它不会删除任何中间文件。 如果在模型库项目中修改一些代码,则BUILD解决方案。 在下面的屏幕截图中,参考DLL的时间戳,在Models和Notification库中更新了EXE。

重建解决方案删除所有编译文件和编译所有不考虑更改, 忽略之前做过的任何事情。 右键单击解决方案名称BuildRebuildClean。它所做的是删除所有的程序集, EXEs和引用文件再次编译。

清洁解决方案删除bin/obj目录下所有已编译的中间文件(即exe和dll)。


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

我完全受够了Visual Studio无法真正清理解决方案,所以写了这个小工具来为你做这件事。

首先在VS中关闭你的解决方案,并将它的文件夹从Windows资源管理器拖到这个应用程序或它的图标中。根据窗口底部的设置,它还可以删除额外的东西,这将有助于你手动上传你的解决方案到GitHub或与他人共享:

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


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

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

重建=清洁+一次构建。这将首先删除bin/Debug文件夹中的所有文件,然后在bin/Debug文件夹中再次创建工件。

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


**Build ,Rebuild, Clean Solution**

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

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

重建方案 :删除所有编译过的文件,并重新编译它们,不管代码是否已经更改。


问题分为两部分……但是所有的答案(除了Justin Niessner)都只关注第一部分:区别。第二部分是我觉得更有趣的:“什么时候使用这些东西的合适时间?”但让我先说说我是如何看待它们的:

构建:应该并且通常会:生成(构建)相对于源文件已经过时的每个中间文件和输出文件。

重建:一种变通方法(hack),允许您在构建命令由于过时的计算错误而失败时进行构建。

Clean:删除生成的(中间文件和输出文件)文件,以便后续构建可以工作的一种hack实现。黑客,因为它经常删除不够。VS设计器将所有中间文件和输出文件放在单独的目录中。为什么不删除这些目录?但是,我跑题了。

没有明确的方法知道什么时候使用一个命令,什么时候使用另一个命令。知道它们的功能,并不能真正告诉我使用它们的适当情况。

这更多的是关于个性而不是科学。乐观主义者大部分时间都使用Build,但如果Build失败了,他们就会求助于Rebuild,他们认为问题出在Visual Studio的不稳定行为上。如果重建失败,他们就会进行清洁和重建。当这行不通时,他们就开始谷歌……

更悲观的人总是使用Rebuild,因为它更可靠,尽管每次使用都需要更长的时间。最悲观的人总是先清理再重建。他们忘记了有一个构建命令。他们还系着腰带和背带裤。

有些人可能认为这是愤世嫉俗。但是,我不这么认为。我认为Visual Studio的用户体验很糟糕,用户和行业已经习惯了它。更糟糕的是,由于VS无处不在,许多其他工具采用了相同的UX。

依我看,微软应该:修复Build,修复Clean,消除Rebuild