2012-08-13 60 views
42

当Visual Studio运行构建时,它会运行MSBuild来完成大部分工作。如果将.sln文件传递给MSBuild,并具有适当的配置和平台属性,它将按照Visual Studio的方式构建解决方案。Visual Studio传递给MSBuild的参数是什么?

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

然而,有差异:有时候构建将通过MSBuild的,而不是通过Visual Studio,反之亦然错误。

Visual Studio通过什么参数传入MSBuild来影响进程?有一些方法可以查看它在构建执行时传递的参数吗?

+0

从技术上讲,它不运行'MSBuild.exe',但在内部托管构建引擎,请参阅我的答案以获取更多详细信息。 – 2012-08-13 11:18:15

回答

31

Visual Studio中不执行MSBuild.exe命令行参数,但承载构建引擎本身(由Microsoft.Build.*组件的方式) - 至少是该案例为默认的C#项目系统。其他语言,插件,软件包等等可能会有所不同。

其实,在微博上有一篇关于这个文章的系列文章,我试图找到它们并更新这个答案。

UPDATE:再次找到它。查找“Visual Studio中的MSBuild”帖子here

关于您的原题,this页面可能对您有所帮助。你也可以去“工具”,“选项”,“项目和解决方案”,“构建和运行”,并增加MSBuild输出冗长。通过“诊断”,您应该可以看到开始构建时设置的每个属性。

+1

我永远无法看到一个外部的MSBuild进程,所以我预计托管是这种情况。诊断设置听起来接近我想要的,但它确实使得难以理解相同的MSBuild命令行语法,即使存在。 – 2012-08-13 12:03:07

+0

@ProgrammingHero就是这一点 - 没有这样的命令行。你将不得不通过“逆向工程”的属性来提出它,排序。 – 2012-08-13 12:08:00

+0

我发现这是一篇很好的参考文章http://blogs.msdn.com/b/msbuild/archive/2006/01/06/508981.aspx。我会把它编辑成你的答案,但认为它可能有点推定。也许你想添加这个,所以我可以接受你的答案? – 2012-08-15 12:26:54

7

首先,您可以使用参数/v:diag运行msbuild以获取诊断级日志记录。这可以真正帮助确定构建失败的原因。

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

具体做法是:

  • 运行进程监视器
  • 过滤器»过滤...
  • OperationisProcess Create»添加
  • OperationisProcess Start»添加
  • OK
  • 运行构建通过VS和thr ough命令行的MSBuild
  • 查看在详细列
+0

如果MSBuild是作为一个单独的进程执行的,那么这将是一条路。不幸的是,至少在Visual Studio 2010中,它不会显示为一个单独的进程。 – 2012-08-13 12:03:54

相关问题