首页 > 解决方案 > 如何输出某些 msbuild 目标的持续时间?

问题描述

今天,我在每个要测量的目标中复制/粘贴以下内容并记录其持续时间:

  <Target Name="YabaDabaDoo" ...>
    <PropertyGroup>
      <Start>$([System.DateTime]::Now.Ticks)</Start>
    </PropertyGroup>
    ...
    <PropertyGroup>
      <End>$([System.DateTime]::Now.Ticks)</End>
      <Ticks>$([MSBuild]::Subtract($(End), $(Start)))</Ticks>
      <Elapsed>$([MSBuild]::Divide($(Ticks), 10000000))</Elapsed>
    </PropertyGroup>
    <Message Text="Duration: $(Elapsed) seconds" Importance="High"/>
  </Target>

我不喜欢它,因为它太冗长,有时目标逻辑正确占用的空间比持续时间日志记录要少。

有没有办法更简洁地实现它?

标签: msbuild

解决方案


您是否考虑过实现一个可以做到这一点的记录器?有关示例,请参见http://msbuildlog.com 。

这是有关如何实现自己的记录器的文档: https ://docs.microsoft.com/en-us/visualstudio/msbuild/build-loggers?view=vs-2017

如果您运行msbuild.exe /bl然后在 MSBuild 结构化日志查看器中打开生成的 .binlog,它将在时间线视图中显示所有目标的持续时间:

时间线视图


推荐阅读