使用msbuild构建解决方案文件

时间:2013-01-02 09:22:39

标签: visual-studio-2010 msbuild

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

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

即使构建在某个时刻开始,构建看起来仍然挂起并且无法向前移动,如下所示

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

我必须构建.proj下的SolutionFile.sln

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

2 个答案:

答案 0 :(得分:31)

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

set msbuildemitsolution=1

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

答案 1 :(得分:25)

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

命令行语法如下,将输出保存到名为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