49

我正要使用 msbuild 构建一个 Visual Studio 解决方案文件。我使用以下命令行来构建解决方案

msbuild.exe SolutionFile.sln /t:Build/p:Configuration=Release;Platform=Win32

即使构建在某个时候开始,构建看起来也挂起并且无法向前推进,如下所示

Done Building Project "D:\SolutionPath\ProjectFile10.vcxproj" (default targets).

我必须建立很多.projSolutionFile.sln

我必须使用msbuild.exe而不是devenv.com

4

2 回答 2

35

有一种技术可以诊断 msbuild 内部发生的事情,它可以帮助您弄清楚这里发生了什么。从命令提示符设置环境变量:

set msbuildemitsolution=1

运行 msbuild 后,这将生成一个.metaproj文件。此文件是 msbuild 内部使用的文件,但随后会被删除。您可以阅读它以找出实际目标的名称。Build目标被扩展以显示它实际调用的内容。然后,您可以尝试使用/tmsbuild 标志构建单个目标,以找出导致问题的目标。

于 2013-01-02T10:30:09.667 回答
29

将详细程度属性设置为诊断并将输出保存到文件中。这将帮助您确定解决方案中的哪个项目挂起并帮助诊断您的问题。

命令行语法如下,将输出保存到名为 MyProjectOutput.log 的文件中:

msbuild SolutionFile.sln /t:build /fl /flp:logfile=MyProjectOutput.log;verbosity=diagnostic

在您列出的命令中传递的 /t 目标之后似乎还需要一个空格来构建参数。

msbuild.exe SolutionFile.sln /t:Build /p:Configuration=Release;Platform=Win32

另外,您确定每个项目都包含“Release”和“Win32”配置吗?您也可以尝试运行以下命令并查看编译的内容。Msbuild 将自动运行所需的默认目标和配置。

msbuild SolutionFile.sln

您可以尝试的另一种选择是编译项目并查看生成的内容:

msbuild "D:\SolutionPath\ProjectFile10.vcxproj" /fl /flp:logfile=MyProjectOutput.log;verbosity=diagnostic
于 2013-01-02T15:48:02.450 回答