MSBuild vs devenv用于命令行构建

时间:2012-03-07 15:42:22

标签: c# c++ visual-studio-2010 msbuild devenv

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

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

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

P.S。我正在使用Visual Studio 2010 SP1

5 个答案:

答案 0 :(得分:22)

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

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

(你可以通过defining an exec task which calls devenv解决这个问题,但是你仍然需要Visual Studio。)

答案 1 :(得分:9)

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

答案 2 :(得分:4)

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

Nant是Apache Foundation的类似工具。

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

答案 3 :(得分:4)

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

/v:diag

答案 4 :(得分:2)

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