使用IncrediBuild与DevEnv.exe相比MSBuild.exe有什么不同?

9
我使用Xorax IncrediBuild来构建Visual Studio 2013(或更高版本)的解决方案和项目,它们主要是.vcxproj和一堆.csproj。
经过一番挖掘,我了解到:
- 当IncrediBuild与常规Visual Studio一起使用时,默认情况下使用Devenv.exe。 - 自5.0版本以来,BuildConsole.exe支持一个新开关:/UseMSBuild,可以明确指示IncrediBuild使用MSBuild的构建引擎,而不是默认的Visual Studio的DevEnv。
因此,在Visual Studio项目的情况下,有两种模式可用:
  • BuildConsole.exe MyProj.vcxproj 使用 DevEnv.exe

  • BuildConsole.exe MyProj.vcxproj /usemsbuild 使用 MSBuild.exe

我想知道使用这两个引擎是否有任何差别

我做了一些测试,发现:

  • DevEnv.exe 的 "Initializing..." 阶段需要稍微更长的时间。

  • BuildConsole.exe 显然会生成不同的输出。

  • 在构建性能方面没有(或只有微不足道的)差异。

对于构建单个 C/C++ 本地项目(.vcxproj)以及整个解决方案(.sln),使用 DevEnv.exeMSBuild.exe 有什么优缺点


不知道我是否做错了什么,但这完全是主观的。我有78个项目,使用VS2017构建进行了“全部重建”,用时2:36(分:秒),而使用Incredibuild则需要超过5分钟,我只好停止了它。哎呀...两者都使用DevEnv。 - Saturn K
2个回答

9

** 免责声明:我在IncrediBuild工作 **

我们与微软共同确定,为了获得与在Visual Studio内部构建(不使用IncrediBuild)相同的构建行为,应使用DevEnv。MSBuild在构建输出和执行自定义步骤等方面的行为方式与VS略有不同。如果用户希望IncrediBuild生成的构建与从Visual Studio构建时的行为相同,则应使用默认方式(IncrediBuild执行DevEnv)。如果用户习惯于使用MSBuild执行构建,无论是通过命令行还是通过TFS,都应使用UseMSBuild开关。我们希望允许用户根据他们习惯的方式选择IncrediBuild的工作方式,就像微软支持DevEnv和MSBuild一样。

其他评论:

  1. 当使用Devenv时,初始化阶段确实需要更长时间,因为devenv以与msbuild不同的方式加载和解析解决方案和.vcxproj文件。如果一个解决方案有更多的项目,这个阶段所需的时间就会更长。这个阶段所需时间的增加通常大大抵消了实际构建时间的速度提升——当同时构建多个项目时。
  2. 推荐使用Devenv进行我们的预测执行功能,该功能可以提供高达20%的额外构建加速,这归功于上述工作方式,这种方式使用MSBuild是不可能的。

我认为这并不值得单独在SO上提问,所以我会在这里问。如果使用DevEnv.exe引擎,并且您传递了.vcxproj文件但没有相应的.sln文件,BuildConsole.exe会做什么?它会生成临时的.sln文件吗? - mloskot

2
微软非常明确地表明了这一点:
对于与构建相关的任务,现在建议您使用MSBuild而不是devenv。有关更多信息,请参阅MSBuild命令行参考。
自VS2010以来,在Devenv文档中有一个注释,这是第一个支持使用MSBuild构建C++项目并将默认项目文件扩展名从.vcproj更改为vcxproj的VS版本。
这种建议的智慧只有在它们不明确时才能推断出来。你已经看到,Devenv.exe 是一个非常重的进程,具有许多 DLL 依赖项,需要一段时间才能启动。另一个问题是,您现在正在使用的方式可能会让您感到烦恼,最初的指导是使用 Devenv.com 而不是 Devenv.exe。那些依赖关系也是麻烦制造者,往往会在像服务这样的不寻常运行时环境中妨碍或直接失败。一个来自地狱的故事样本是 this Q+A,三个答案都看起来不正确。还有其他的例子。

简单的建议是使用推荐的方法。


Hans,我很高兴接受你的答案。尽管我没有收到关于IncrediBuild支持的两个引擎的利弊细节,但我意识到这可能是一个“无法回答”的问题,除非Xoreax的人加入进来。谢谢! - mloskot
我已经将答案更改为avi的,因为它确认了更多相关细节。 - mloskot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接