我正准备使用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
答案 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