用 MSBuild 获取生成日志

使用 MSBuild 命令行选项,可指定要查看的生成数据量,以及是否要将生成数据保存到一个或多个文件。 还可指定一个自定义记录器来收集生成数据。 对于本主题未涉及的 MSBuild 命令行选项的相关信息,请参阅命令行参考

注意

如果使用 Visual Studio IDE 生成项目,则可通过查看生成日志排除这些生成中的故障。 有关详细信息,请参阅如何:查看、保存和配置生成日志文件

设置详细信息级别

在不指定详细信息等级的情况下使用 MSBuild 生成项目时,输出日志中会出现以下信息:

  • 错误、警告和被分类为极为重要的消息。

  • 一些状态事件。

  • 生成总结。

使用 -verbosity (-v) 开关,可控制输出日志中的数据量。 对于故障排除,请使用 detailed (d) 或 diagnostic (diag) 的详细级别,它可提供大部分信息。

如果你将 -verbosity 设置为 detailed,生成流程可能会减速;如果你将 -verbosity 设置为 diagnostic,此流程甚至会更慢。

msbuild MyProject.proj -t:go -v:diag

详细级别设置

下表显示日志详细级别(列值)如何影响记录的消息类型(行值)。

消息类型/详细程度 Quiet 最低 普通 详细 诊断
错误
警告
高重要性消息
一般重要性消息
低重要性消息
其他 MSBuild 引擎信息

将生成日志保存到文件中

可使用 -fileLogger (fl) 开关,将生成数据保存到文件中。 以下示例将生成数据保存到名为“msbuild.log”的文件。

msbuild MyProject.proj -t:go -fileLogger

在以下示例中,日志文件被命名为“MyProjectOutput.log”,且日志输出的详细级别设置为了 diagnostic。 使用 -fileLoggerParameters (flp) 开关指定这两个设置。

msbuild MyProject.proj -t:go -fl -flp:logfile=MyProjectOutput.log;verbosity=diagnostic

有关详细信息,请参阅命令行参考

将日志输出保存到多个文件中

以下示例将整个日志保存到了 msbuild1.log,将错误保存到了 JustErrors.log,并且将警告保存到了 JustWarnings.log。 该示例为三个文件中的每个文件都使用了文件编号。 文件编号是紧跟在 -fl 和 -flp 开关后面指定(例如,-fl1-flp1)。

文件 2 和 3 的 -fileLoggerParameter (flp) 开关指定了每个文件的名称和内容。 未为文件 1 指定名称,因此使用了默认名称“msbuild1.log”。

msbuild MyProject.proj -t:go -fl1 -fl2 -fl3 -flp2:logfile=JustErrors.log;errorsonly -flp3:logfile=JustWarnings.log;warningsonly

如果您使用的是解释分号的 shell(例如 bash),请将任何带有分号的选项放在单引号或双引号内,以防止其被解释为命令分隔符。 有关详细信息,请参阅命令行参考

保存二进制日志

可使用 -binaryLogger (bl) 开关,以压缩二进制格式保存日志。 此日志包含生成进程的详细说明,并可以由某些日志分析工具读取。

在以下示例中,创建了名为“binarylogfilename”的二进制日志文件。

-bl:binarylogfilename.binlog

可以使用 结构化日志查看器 来查看二进制日志,这样可以更轻松地了解日志的内容。

有关详细信息,请参阅命令行参考

使用自定义记录器

可以通过创作一个实现 ILogger 接口的托管类型来编写自己的记录器。 例如,可使用自定义记录程序,在电子邮件中发送生成错误,将其记录到数据库,或记录到 XML 文件。 有关详细信息,请参阅生成记录器

在 MSBuild 命令行中,可使用 -logger 开关指定自定义记录器。 还可使用 -noconsolelogger 开关,禁用默认控制台记录器。