Visual studio Visual Studio传递给MSBuild的参数是什么?

Visual studio Visual Studio传递给MSBuild的参数是什么?,visual-studio,msbuild,Visual Studio,Msbuild,VisualStudio运行生成时,会运行MSBuild来完成大部分工作。如果使用适当的配置和平台属性将.sln文件传递给MSBuild,它将以类似于Visual Studio的方式构建解决方案 msbuild mysolution.sln /p:Configuration=Release /p:Platform="Any CPU" 但是,也有区别:有时生成会通过MSBuild而不是通过VisualStudio出错,反之亦然 Visual Studio将哪些参数传递到MSBuild以影响该过程

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

msbuild mysolution.sln /p:Configuration=Release /p:Platform="Any CPU"
但是,也有区别:有时生成会通过MSBuild而不是通过VisualStudio出错,反之亦然


Visual Studio将哪些参数传递到MSBuild以影响该过程?是否有某种方法可以在执行生成时查看它传递的参数?

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

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

具体而言:

  • 运行进程监视器
  • 过滤器»过滤器
  • 操作
    过程创建
    »添加
  • 操作
    过程开始
    »添加
  • 通过VS和命令行msbuild运行生成
  • 请参见“详细信息”列中的命令行参数

Visual Studio不执行
MSBuild.exe
,而是承载生成引擎本身(通过
Microsoft.build.*
程序集)-至少默认C#项目系统是这样。其他语言、加载项、包等可能会有不同的做法

事实上,微软的博客上有一个关于这个的系列文章,我正试图找到它们并更新这个答案

更新:再次找到它。查找“VisualStudio中的MSBuild”帖子


关于您最初的问题,page可能会对您有进一步的帮助。此外,您还可以转到“工具”、“选项”、“项目和解决方案”、“构建和运行”并增加MSBuild输出的详细程度。使用“Diagnostic”,您基本上可以看到启动生成时设置的每个属性。

从技术上讲,它不运行
MSBuild.exe
,而是在内部托管生成引擎,有关详细信息,请参阅我的答案。我从未看到外部MSBuild进程,因此我希望托管就是这样。诊断设置听起来很接近我想要的,但它确实使理解等效的MSBuild命令行语法变得更加困难(如果存在的话)。@Programmingero这就是问题所在-没有这样的命令行。你必须通过“逆向工程”的方法来解决这个问题,我觉得这是一篇很好的参考文章。我会把它编辑成你的答案,但我觉得这可能有点假设性。也许你想补充一下,这样我就可以接受你的答案了?2015年还是这样吗?Roslyn会是这样吗?@GeorgeMauer坦率地说,我不知道,也还没有找到时间调查VS2015;-)但是我认为Roslyn使用了某种客户机/服务器编译架构,不是吗?如果是这样的话,我猜VS将只是另一个客户端(就像新的csc.exe是另一个客户端一样)。但是,这里完全不确定。如果MSBuild作为一个单独的进程执行,那么这将是一条路;不幸的是,至少在VisualStudio2010中,它没有显示为一个单独的过程。