我想知道:从命令行编译解决方案时使用 msbuild 和 devenv 有什么区别?
值得注意的一件明显的事情是,msbuild 确实构建了解决方案中不包含的依赖项目,而 devenv 没有。
还有其他的吗?是否有一些特殊标志可以传递给 msbuild 以使其与 devenv 构建完全匹配?
PS 我正在使用 Visual Studio 2010 SP1
我想知道:从命令行编译解决方案时使用 msbuild 和 devenv 有什么区别?
值得注意的一件明显的事情是,msbuild 确实构建了解决方案中不包含的依赖项目,而 devenv 没有。
还有其他的吗?是否有一些特殊标志可以传递给 msbuild 以使其与 devenv 构建完全匹配?
PS 我正在使用 Visual Studio 2010 SP1
MSBuild 的主要优点是您不需要安装 Visual Studio。
MSBuild 的一个限制是它不支持构建 Visual Studio 安装项目 ( .vdproj )。
(您可以通过定义一个调用 devenv 的 exec 任务来解决此问题,但您仍然需要 Visual Studio。)
根据这个MSDN 博客条目,他们试图最小化差异,但那些存在的差异(即使用集成的 C# 编译器而不是csc.exe
或设置BuildingInsideVisualStudio
属性)主要是为了优化构建的性能。
另一个主要区别是它msbuild
有一些不存在的选项devenv
。据我所知,没有办法增加详细程度,devenv
但您可以msbuild
通过以下选项增加详细程度:
/v:diag
我遇到了devenv
一个项目文件丢失时写错误消息,但无论如何都返回0的情况。相比之下,msbuild
返回一个非零值。我将我们的 makefile 切换到 using msbuild
,这样我们就不会忽略错误。