【问题标题】:Using IncrediBuild with DevEnv.exe vs MSBuild.exe将 IncrediBuild 与 DevEnv.exe 与 MSBuild.exe 结合使用
【发布时间】:2015-10-13 11:56:01
【问题描述】:

我使用 Xorax IncrediBuild 构建 Visual Studio 2013(或更高版本)解决方案和项目,它们大多是 .vcxproj 和一堆 .csproj

我花了一点时间挖掘,但我了解到:

因此,对于 Visual Studio 项目,有两种可用模式:

  • BuildConsole.exe MyProj.vcxproj 使用DevEnv.exe

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

我想了解使用这两个引擎之间是否有任何差异

我做了一些测试并观察到:

  • DevEnv.exe 的情况下,IncrediBuild“正在初始化...”阶段需要稍长的时间。

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

  • 构建性能没有(或微不足道)差异。

在构建单个 C/C++ 原生项目 (.vcxproj) 以及整个解决方案 (.sln) 的情况下,使用 DevEnv.exeMSBuild.exe优点和缺点 ?

【问题讨论】:

  • 不知道我做错了什么,但这完全是主观的。我有 78 个项目,我使用 VS2017 构建进行了“全部重建”,耗时 2:36(m:ss),而使用 Incredibuild 时,它超过了 5m,我只是停止了它。哦,好吧...都使用 DevEnv。

标签: visual-studio build msbuild devenv incredibuild


【解决方案1】:

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

我们已与 Microsoft 一起确定,为了获得与在 Visual Studio 中构建(没有 IncrediBuild)相同的行为方式的构建,应该使用 DevEnv。 MSBuild 以与 VS 稍有不同的方式执行构建,无论是在其生成的构建输出中,还是在执行自定义步骤和其他一些小事情时的行为方式上。如果用户希望 IncrediBuild 构建的行为方式与从 Visual Studio 构建时习惯的方式相同,则应使用默认方式(IncrediBuild 执行 DevEnv)。如果用户习惯于使用 MSBuild 执行他的构建,无论是从命令行还是通过 TFS,都应该使用 UseMSBuild 开关。我们希望允许用户根据他们习惯的方式来选择他们希望 IncrediBuild 的工作方式,就像 Microsoft 同时支持 DevEnv 和 MSBuild。

其他 cmets:

  1. 使用 Devenv 时,初始化阶段确实更长,因为 devenv 加载和解析解决方案和 .vcxproj 文件的方式与 msbuild 不同。解决方案的项目越多——这个阶段需要的时间就越长。完成此阶段所需的时间增加通常会被实际构建时间的速度增加(在同时构建多个项目时)大大抵消。
  2. 强烈建议将 Devenv 用于我们的预测执行功能,由于上述工作方式,使用 MSBuild 无法提供高达 20% 的额外构建加速。

【讨论】:

  • 我认为它不值得单独提出一个 SO 问题,所以会在这里问。如果您通过 .vcxproj 并且没有相应的 .sln 可用,您是否还可以了解 BuildConsole.exe 的功能,如果与 DevEnv.exe 引擎一起使用?它会生成临时 .sln 吗?
【解决方案2】:

微软是pretty explicit

对于与构建相关的任务,现在建议您使用 MSBuild 而不是 devenv。有关详细信息,请参阅 MSBuild 命令行参考。

自 VS2010 以来 Devenv 文档中的一个注释,VS 的第一个版本开始支持使用 MSBuild 构建 C++ 项目,并将默认项目文件扩展名从 .vcproj 更改为 vcxproj。

这种建议的智慧只有在它们没有明确说明的情况下才能推断出来。如您所见,Denvv.exe 是一个非常繁重的进程,具有许多 DLL 依赖项,需要一段时间才能开始。另一个你可能会担心你现在这样做的方式,最初的指导是使用 Devenv.com 而不是 Devenv.exe。这些依赖关系也是麻烦制造者,当 Devenv.exe 在像服务这样的不寻常的运行时环境中运行时,它们往往会阻碍或直接崩溃。来自地狱的示例故事是this Q+A,三个答案看起来都不正确。还有其他的。

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

【讨论】:

  • 汉斯,我很高兴接受你的回答。尽管我没有收到有关 IncrediBuild 支持的两个引擎的优缺点的详细信息,但我确实意识到这可能是“无法回答”的问题,除非 Xoreax 人员加入。谢谢!
  • 仅供参考,我已将答案切换为 avi,因为它确认了更多相关细节。
猜你喜欢
  • 2019-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 2018-10-03
  • 2017-04-15
  • 2010-11-06
  • 2017-01-11
相关资源
最近更新 更多