将 IncrediBuild 与 DevEnv.exe 对比 MSBuild.exe

Using IncrediBuild with DevEnv.exe vs MSBuild.exe

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

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

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

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

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

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

Microsoft pretty explicit 关于它:

For build-related tasks, it is now recommended that you use MSBuild instead of devenv. For more information, see MSBuild Command Line Reference.

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

这种建议的智慧只有在他们不明确的时候才能推断出来。你已经看到,Devenv.exe 是一个相当繁重的过程,有许多 DLL 依赖项,需要一段时间才能开始。另一个你可能会担心你现在做的方式,最初的指导是使用 Devenv.com 而不是 Devenv.exe。这些依赖项也是麻烦制造者,当 Devenv.exe 在不寻常的运行时环境(如服务)中运行时,它们往往会妨碍或完全失败。来自地狱的示例故事是 this Q+A,三个答案和 none 看起来是正确的。还有其他的。

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

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

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

其他评论:

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