62

当 Visual Studio 运行构建时,它会运行 MSBuild 来完成大部分工作。如果您将 .sln 文件传递​​给 MSBuild,并带有适当的配置和平台属性,它将以类似于 Visual Studio 的方式构建您的解决方案。

msbuild mysolution.sln /p:Configuration=Release /p:Platform="Any CPU"

但是,存在差异:有时构建会通过 MSBuild 而不是通过 Visual Studio 出错,反之亦然。

Visual Studio 将哪些参数传递到 MSBuild 以影响该过程?有没有办法查看它在执行构建时传递的参数?

4

2 回答 2

45

Visual Studio 不执行MSBuild.exe,而是托管构建引擎本身(通过Microsoft.Build.*程序集) - 至少默认 C# 项目系统是这种情况。其他语言、插件、包等可能会有所不同。

实际上,微软博客上有一个关于这个的帖子系列,我正在尝试找到它们并更新这个答案。

更新:再次找到它。在此处查找“Visual Studio 中的 MSBuild”帖子。

关于您的原始问题,页面可能会进一步帮助您。您也可以转到“工具”、“选项”、“项目和解决方案”、“构建和运行”并增加 MSBuild 输出的详细程度。使用“诊断”,您基本上应该看到在开始构建时设置的每个属性。

于 2012-08-13T11:14:09.600 回答
12

首先,您可以使用参数运行 msbuild/v:diag以获取诊断级别的日志记录。这确实有助于找出构建失败的原因。

否则,是的,如果您使用Process Monitor,您可以监视进程启动事件,您可以在其中看到发送到进程的特定命令行。

具体来说:

  • 运行进程监视器
  • 过滤器 » 过滤器...
  • Operation is Process Create“ 添加
  • Operation is Process Start“ 添加
  • 好的
  • 通过 VS 和命令行 msbuild 运行您的构建
  • 请参阅详细信息列中的命令行参数
于 2012-08-13T10:59:51.473 回答