msbuild - 如何输出某些 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>
我不喜欢它,因为它太冗长,有时目标逻辑正确占用的空间比持续时间日志记录要少。
有没有办法更简洁地实现它?
解决方案
您是否考虑过实现一个可以做到这一点的记录器?有关示例,请参见http://msbuildlog.com 。
这是有关如何实现自己的记录器的文档: https ://docs.microsoft.com/en-us/visualstudio/msbuild/build-loggers?view=vs-2017
如果您运行msbuild.exe /bl
然后在 MSBuild 结构化日志查看器中打开生成的 .binlog,它将在时间线视图中显示所有目标的持续时间:
推荐阅读
- java - Spring AOP 不在代理类的 @Transactional 方法中注入事务
- c# - 使用多个 POST 方法将数据从视图传递到控制器?
- android - 没有专用子组件的片段注入
- html - 调整大小后定位输入标签光标
- android - Unity3d Android Java堆空间错误
- php - 无法使用 php 连接到外部 FTPS 服务器
- c++ - 在c ++中使用递归从字符串中删除所有辅音
- c++ - 未命名命名空间或命名命名空间或内联
- unity3d - 统一的相机资产
- android - Android:isProviderEnabled(LocationManager.NETWORK_PROVIDER) 不起作用。只有 isProviderEnabled(LocationManager.GPS_PROVIDER)