38

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

值得注意的一件明显的事情是,msbuild 确实构建了解决方案中不包含的依赖项目,而 devenv 没有。

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

PS 我正在使用 Visual Studio 2010 SP1

4

5 回答 5

26

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

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

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

于 2012-03-07T16:06:19.610 回答
11

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

于 2012-03-07T16:13:35.310 回答
5

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

Nant 是 Apache Foundation 的一个类似工具。

有关更多信息,请查看此处:

于 2012-03-07T15:51:24.047 回答
5

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

/v:diag
于 2014-08-19T20:06:14.407 回答
3

我遇到了devenv一个项目文件丢失时写错误消息,但无论如何都返回0的情况。相比之下,msbuild返回一个非零值。我将我们的 makefile 切换到 using msbuild,这样我们就不会忽略错误。

于 2016-12-07T16:10:52.277 回答