【发布时间】:2011-03-06 23:18:23
【问题描述】:
Visual Studio 中的 Build Solution、Rebuild Solution 和 Clean Solution 有什么区别?
什么时候适合使用这些?
【问题讨论】:
-
rebuild 和 clean then build 一样吗?
-
@ColonelPanic 是的
标签: visual-studio
Visual Studio 中的 Build Solution、Rebuild Solution 和 Clean Solution 有什么区别?
什么时候适合使用这些?
【问题讨论】:
标签: visual-studio
(链接指向 devenv.exe 命令行开关,但它们的作用与菜单项相同。)
【讨论】:
.gitignore 文件更简单。但根据答案,根据我的经验,Clean 并不总是做得特别彻底。
构建解决方案:编译更改的代码文件(DLL 和 EXE)。
重建:删除所有已编译的文件并重新编译它们,无论代码是否已更改。
清理解决方案:删除所有已编译的文件(DLL 和 EXE 文件)。
您可以观看这个 YouTube 视频 (Visual Studio Build vs. Rebuild vs. Clean (C# interview questions with answers)),我在其中演示了不同之处,下面是视觉表示,可帮助您更详细地分析相同之处。
Rebuild 与(Clean + Build)之间的区别,因为这似乎也有一些混淆:
不同之处在于每个项目的构建和清理顺序的发生方式。假设您的解决方案有两个项目,“proj1”和“proj2”。如果您进行重建,它将使用“proj1”,清理(删除)“proj1”的编译文件并构建它。之后,它将获取第二个项目“proj2”,清理“proj2”的编译文件并编译“proj2”。
但如果你执行“清理”并构建“,它将首先删除“proj1”和“proj2”的所有编译文件,然后它会先构建“proj1”,然后再构建“proj2”。
【讨论】:
取自this link:
构建意味着只编译和链接已更改的源文件 自上次构建以来,而重建 表示编译并链接所有源 文件,无论它们是否 改变与否。构建是正常的 要做的事情,而且速度更快。有时 项目目标的版本 组件可能会不同步,并且 重建是进行构建所必需的 成功的。在实践中,你永远不会 需要清洁。
【讨论】:
构建解决方案 - 构建任何已更改文件的程序集。如果程序集没有更改,则不会重新构建。也不会删除任何中间文件。
最常用。
重建解决方案 - 重建所有程序集而不考虑更改,但保留中间文件。
当您注意到 Visual Studio 未将您的更改合并到最新程序集中时使用。有时 Visual Studio 确实会出错。
清理解决方案 - 删除所有中间文件。
当所有其他方法都失败并且您需要清理所有内容并重新开始时使用。
【讨论】:
我只是认为重建是先执行清理,然后执行构建。也许我错了... cmets?
【讨论】:
file reference 而不是project reference,因此项目构建顺序无法识别它必须先构建某个项目,并且程序集在构建过程中应该存在的位置不存在?
构建解决方案将构建解决方案中已更改的所有项目。无论如何,重建都会构建所有项目,干净的解决方案会删除所有临时文件,确保下一个构建完成。
【讨论】:
构建解决方案 - 构建解决方案将构建您的应用程序,并构建具有任何文件更改的项目数量。它不会清除任何现有的二进制文件,只是替换 bin 或 obj 文件夹中的更新程序集。
重建解决方案 - 重建解决方案将构建您的整个应用程序,构建您的解决方案中可用的所有项目并清理它们。在构建之前清除 bin 和 obj 文件夹中的所有二进制文件。
清洁解决方案 - 清洁解决方案只是清除 bin 和 obj 文件夹中的所有二进制文件。
【讨论】:
我认为人们遗漏的一件主要事情是构建和清理都是基于 Visual Studio 对您的项目/解决方案的了解而执行的任务。我看到很多抱怨 Clean 不起作用或留下剩余文件或不可信,而事实上,你说它不可信的原因实际上使它更可信。
Clean 只会删除(清理)Visual Studio 或编译器自己实际创建的文件和/或目录。如果您复制自己的文件或从外部工具或源创建的文件/文件夹结构,则 Visual Studio 不会“知道它们存在”,因此不应触摸它们。
你能想象如果 Clean 操作基本上执行了 "del *.*" 吗?这可能是灾难性的。
Build 对已更改或必要的项目执行编译。
重建会执行编译,无论更改或需要什么。
Clean 会删除它在过去创建的文件/文件夹,但会保留最初与它没有任何关系的任何内容。
我希望这能详细说明一下并有所帮助。
【讨论】:
我有一个空白解决方案BuildRebuildClean 和三个类库Models,Repository,Notification。
我在Notification 类库中使用Models 和Repository。
然后:
Models库项目中的一些代码,则构建解决方案。
在下面的屏幕截图中,参考 DLL 的时间戳,EXE 在Models 和Notification 库中更新。BuildRebuildClean。它所做的是删除所有程序集,
需要重新编译的 EXE 和引用文件。【讨论】:
我所知道的是,Clean 不会像“make clean”那样做 - 如果我清理解决方案,我希望它会删除 obj 和 bin 文件/文件夹,这样它的构建就像是对源代码的全新签出.根据我的经验,虽然我经常发现 Clean and Build 或 Rebuild 仍然会在 已知编译 的源上产生奇怪的错误,并且需要手动删除 bin/obj 文件夹,然后它将构建。
【讨论】:
这仅与“构建解决方案”选项有关。
我完全厌倦了 Visual Studio 无法真正清理解决方案,并写了 this little tool 来为您解决问题。
首先在 VS 中关闭您的解决方案,然后将其文件夹从 Windows 资源管理器拖到此应用程序或其图标中。根据其窗口底部的设置,它还可以删除其他内容,如果您尝试手动将解决方案上传到 GitHub 或与其他人共享,这将有所帮助:
简而言之,它将所有“Debug”文件夹、Intellisense 和其他可以通过 VS 重建的缓存为您放入回收站。
【讨论】:
构建解决方案只构建解决方案中发生变化的项目,不影响没有变化的程序集,
ReBuild 首先清理解决方案中的所有程序集,然后构建整个解决方案,无论是否进行了更改。
清洁,只需清洁溶液。
Clean 将清理 bin/Debug 文件夹中的工件。表示删除 bin/Debug 文件夹中的所有文件。
Build 检查 bin/Debug 文件夹中的工件,如果需要,然后创建工件(同时检查构建时间错误)。
Rebuild = Clean + Build 一口气。这将首先删除 bin/Debug 文件夹中的所有文件,然后在 bin/Debug 文件夹中再次创建工件。
可以通过打开并观察 bin/Debug(或 Release)文件夹,然后清理、构建和重建项目来确认这些操作。
【讨论】: