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
所以我们不会忽略错误。