【问题标题】:What parameters does Visual Studio pass to MSBuild?Visual Studio 将哪些参数传递给 MSBuild?
【发布时间】:2012-08-09 13:20:44
【问题描述】:

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

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

但是,个不同之处:有时构建会通过 MSBuild 而不是通过 Visual Studio 出错,反之亦然。

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

【问题讨论】:

  • 从技术上讲,它不运行 MSBuild.exe,而是在内部托管构建引擎,有关详细信息,请参阅我的答案。

标签: visual-studio msbuild


【解决方案1】:

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

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

具体来说:

  • 运行进程监视器
  • 过滤器 » 过滤器...
  • Operation is Process Create » 添加
  • Operation is Process Start » 添加
  • 好的
  • 通过 VS 和命令行 msbuild 运行您的构建
  • 查看详细信息列中的命令行参数

【讨论】:

  • 如果 MSBuild 作为单独的进程执行,这将是可行的方法;不幸的是,至少在 Visual Studio 2010 中,它没有显示为单独的进程。
【解决方案2】:

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

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

更新:又找到了。查找“Visual Studio 中的 MSBuild”帖子 here

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

【讨论】:

  • 我永远看不到外部 MSBuild 进程,所以我预计托管是这种情况。诊断设置听起来很接近我想要的,但它确实使理解等效的 MSBuild 命令行语法变得更加困难,如果甚至存在的话。
  • @ProgrammingHero 这就是重点——没有这样的命令行。您必须通过“逆向工程”属性来想出它。
  • 我发现这是一篇很好的参考文章blogs.msdn.com/b/msbuild/archive/2006/01/06/508981.aspx。我会将其编辑到您的答案中,但认为这可能有点假设性。也许您想添加此内容以便我接受您的回答?
  • 2015年还是这样吗?罗斯林会这样吗?
  • @GeorgeMauer 坦率地说,我不知道也没有时间研究 VS2015 ;-) 但我 认为 Roslyn 使用某种客户端/服务器编译架构,不是吗?如果是这样,那么我猜 VS 将只是另一个客户端(就像新的 csc.exe 是另一个客户端一样)。但同样,这里完全不确定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多