MSBuild vs devenv用于命令行构建

我想知道:从命令行编译解决方案时使用msbuild和devenv有什么区别?

一个显而易见的事情是,msbuild确实构建了未包含在解决方案中的依赖项目,而devenv则没有。

还有别的吗? 是否有一些特殊标志可以传递给msbuild以使其与devenv构建完全匹配?

PS我正在使用Visual Studio 2010 SP1

根据这个MSDN博客条目,他们尝试最小化差异,但那些存在(即使用集成的C#编译器而不是csc.exe或设置BuildingInsideVisualStudio属性)主要是为了优化构建的性能。

MSBuild的主要优点是您不需要安装Visual Studio。

MSBuild的一个限制是它不支持构建Visual Studio安装项目( .vdproj )。

(你可以通过定义一个调用devenv的exec任务来解决这个问题,但是你仍然需要Visual Studio。)

我在多层团队中经历过一个项目:开发人员,测试人员,部署人员。 MSBuild是部署者的主要工具:他们可以编译和重新编译,只需设置构建参数编辑MSBuild的xml配置文件而无需打开devenv。 事实上,他们经常在没有devenv的pre-prod环境中使用MSBuild。

Nant是Apache Foundation的类似工具。

有关详细信息,请查看此处:

  • 的MSBuild
  • 南特

另一个主要区别是msbuild有一些devenv不存在的选项。 据我所知,没有办法增加devenv冗长度,但你可以通过选项增加msbuild的详细程度:

 /v:diag 

我遇到了一个案例,当项目文件丢失时devenv写了一条错误消息,但无论如何返回0。 相比之下, msbuild返回非零值。 我将makefile切换到使用msbuild所以我们不会忽略错误。