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

Faw*_*awa 1081 visual-studio

Visual Studio中的Build Solution,Rebuild Solution和Clean Solution有什么区别?

什么时候适当使用这些中的每一个?

Jon*_*eet 878

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

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

  • 我个人认为"清洁解决方案"不仅无益.如果我*真的想要它干净,手动删除bin和obj文件夹是要走的路.甚至被追捕幻影"错误" - 直到我这样做.清洁只是不可靠. (148认同)
  • 提供的链接显示Rebuild是一个干净的后跟一个构建,这不是很有帮助吗?我没有兴趣编辑Skeet先生的帖子. (68认同)
  • @Tod:请继续:) (16认同)
  • 如果工件通过其他方式而不是通过构建工件(例如来自在cproj中作为msbuidltask集成的另一个源的副本),那么干净就会留下它们.这让它变得毫无用处,我甚至会说它很危险,因为它会给你一种虚假的清洁感. (7认同)
  • @verdana:对于github等,有一个像样的`.gitignore`文件更简单.但是根据答案,Clean并不总是能够在我的经历中做一个特别彻底的工作. (4认同)
  • @Tod:我过去注意到,当 Rebuild 给我链接错误时,Clean+Build 会起作用。 (3认同)
  • @womp:不是我刚刚看过的项目.它仍然有那里的所有组件...... (2认同)
  • @Jon - 很奇怪。我不记得没有清理过那些目录。我现在正在这样做,它正在擦除所有 .dll 和 .pdb 文件。不过,绝对让我的 ReSharper 垃圾单独存在。 (2认同)

Shi*_*ala 428

构建解决方案:编译已更改的代码文件(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".

重建与清洁

  • 感谢您解释为什么Rebuild不能始终工作,我经常需要在构建之前进行清理. (24认同)
  • 是的,描述和第二张图非常有用且清晰.如果您可以修复"非法"流程图,那么Yes只会到达一个地方,这会有所帮助.我真的无法理解那个人想说什么,尤其是"重建"下的"Build ALL". (4认同)

Mat*_*nes 144

取自此链接:

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

  • "在实践中你永远不需要清理"< - 我在这个上打电话给BS. (5认同)
  • [这是一个很好的帖子,详细信息](http://conceptf1.blogspot.com/2013/11/visual-studio-clean-build-and-rebuild-solution.html) (3认同)
  • 关联?我认为 DLL(又名动态链接库)的想法是在运行时链接? (3认同)
  • piers7你能提供一个你需要清理vs重建的原因吗? (2认同)
  • @PaulBinder [你不必看得太远。](/sf/ask/216713101/?rq=1 #comment32042384_17781143) (2认同)

Jus*_*ner 41

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

最常用的.

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

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

清洁解决方案 - 删除所有中间文件并重建所有程序集,无论更改如何

当所有其他方法都失败时使用,您需要清理所有内容并重新开始.

  • 清洁不会构建. (24认同)
  • @Jon Skeet - 每天都在学习新东西.我会发誓它重建了.我想我的记忆并不像我想的那样可靠. (3认同)
  • *当您发现 Visual Studio 未将您的更改合并到最新程序集中时使用。有时 Visual Studio 确实会犯错误。* - 这就是我赞成这个答案的原因,因为似乎没有其他答案对此表示赞同 (2认同)

Ken*_*rds 13

我只想到Rebuild首先执行Clean,然后是Build.也许我错了......评论?

  • 我不这么认为.我有一个做清洁解决方案的情况,然后是Build Solution工作,但是做一个Rebuild Solution失败了.这是一个新创建的解决方案,有2个项目(一个依赖于另一个). (2认同)

小智 13

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

重建解决方案将清理,然后从头开始构建解决方案,忽略之前完成的任何事情

Clean Solution将从bin/obj目录中删除所有已编译的文件(即EXE和DLL).


Ste*_*ers 7

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


Sab*_*s R 6

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

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

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


Cha*_*ase 6

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

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

您能想象 Clean 操作是否基本上执行了 "del *.*" 吗?这可能是灾难性的。

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

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

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

我希望这能详细说明并有所帮助。


Rez*_*abi 5

我有一个空白解决方案BuildRebuildClean和三个类库Models, Repository, Notification.

我在类库中使用Models和。RepositoryNotification

然后:

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

在此处输入图片说明

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

在此处输入图片说明

  • Clean Solution 从bin/obj 目录中删除所有已编译的中间文件(即EXE 和DLL)。

在此处输入图片说明