我想知道:从命令行编译解决方案时使用msbuild和devenv有什么区别?
一个显而易见的事情是,msbuild确实构建了未包含在解决方案中的依赖项目,而devenv则没有。
还有其他吗?是否有一些特殊标志可以传递给msbuild以使其与devenv构建完全匹配?
P.S。我正在使用Visual Studio 2010 SP1
答案 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
,因此我们不会忽略错误。