【问题标题】:Building a solution file using msbuild使用 msbuild 构建解决方案文件
【发布时间】:2012-12-16 16:04:08
【问题描述】:

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

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

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

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

SolutionFile.sln 下有很多 .proj 是我必须构建的。

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

【问题讨论】:

  • 请提供更多信息/msbuild 输出,现在无法回答
  • 参数之间需要一个空格..msbuild.exe SolutionFile.sln /t:Build /p:Configuration=Release;Platform=Win32

标签: visual-studio-2010 msbuild


【解决方案1】:

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

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

【讨论】:

  • 这对解决方案中的 .NET Core 项目是否同样有效?
  • docs.microsoft.com/en-us/dotnet/core/tools/… MSBuild 已移植到 .net core,可以在任何运行 .net core 的平台上运行。
  • 也就是说,是的,MSBuild是用来搭建.Net核心平台的。它是构建引擎,所以是的。
  • 我使用了msbuild.exe SolutionFile.sln /t:Build /p:Configuration=Release /p:Platform=Win32,而不是您的第二个命令。我认为每个参数都需要/p: 缩写为/property:,并且不能使用以分号分隔的参数列表。
  • @JohnDoe 这是一个内置于 msbuild 的快捷方式。您可以指定 /p: 一次并使用 ; 分隔属性.然而,这两种方式都有效。 Msbuild 非常多样化
【解决方案2】:

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

set msbuildemitsolution=1

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

【讨论】:

猜你喜欢
  • 2011-09-09
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 2012-09-21
  • 2010-12-13
  • 2023-03-17
  • 1970-01-01
  • 2018-10-01
相关资源
最近更新 更多