Msbuild 如何记录在每项任务中花费的时间?

Msbuild 如何记录在每项任务中花费的时间?,msbuild,teamcity,Msbuild,Teamcity,在Teamcity上,我的项目的构建日志如下所示: [Build] MSBuild (28s) [CoreCompile] Csc (6s) [RunCodeAnalysis] CodeAnalysis (11s) [StyleCop] StyleCopTask (9s) [Build] MSBuild (9s) [CoreCompile] Csc [RunCodeAnalysis] CodeAnalysis (8s) [StyleCop] St

在Teamcity上,我的项目的构建日志如下所示:

[Build] MSBuild (28s)
    [CoreCompile] Csc (6s)
    [RunCodeAnalysis] CodeAnalysis (11s)
    [StyleCop] StyleCopTask (9s)

[Build] MSBuild (9s)
    [CoreCompile] Csc
    [RunCodeAnalysis] CodeAnalysis (8s)
    [StyleCop] StyleCopTask
这是一个简化的摘录,完整的日志有数千行长。无论如何,这些行显示了每个msbuild任务花费的时间(如果省略括号中的时间,我理解这意味着不到一秒钟)

Teamcity是否有可能将这些信息绘制成一张图表,以积累类似的任务?因此,对于上面的示例,该图显示C#编译器为6秒,代码分析为19秒,StyleCop为9秒

对于具有多个“构建步骤”的项目,Teamcity在“PerfMon”选项卡下的表格中显示每个步骤花费的时间。我喜欢这样。但我的项目是一个漫长的“构建步骤”(msbuild)。我想知道时间是如何在里面度过的


动机:我们的建设非常缓慢。我很好奇,与实际编译代码(Csc是C#编译器)相比,花在样式Cop和代码分析上的时间有多长。

如果您对简单的控制台输出没有问题,请尝试使用(/clp:PerformanceSummary)调用MsBuild

在构建结束时,它会输出一个详细的摘要,如下所示

   ...
   14 ms  SplitResourcesByCulture                    3 calls
   18 ms  ResolveProjectReferences                   3 calls
   22 ms  PostBuildEvent                             1 calls
   28 ms  CleanReferencedProjects                    3 calls
   48 ms  UpdateAssemblyInfo                         1 calls
   51 ms  CoreResGen                                 3 calls
   74 ms  CoreClean                                  3 calls
  103 ms  _CopyOutOfDateSourceItemsToOutputDirectory   2 calls
  177 ms  _CopyFilesMarkedCopyLocal                  3 calls
  293 ms  CheckPrerequisites                         3 calls
  327 ms  GenerateTemporaryTargetAssembly            1 calls
  329 ms  Clean                                      5 calls
  460 ms  MarkupCompilePass2                         1 calls
  627 ms  ResolveAssemblyReferences                  3 calls
  890 ms  RestorePackages                            3 calls
  891 ms  MarkupCompilePass1                         1 calls
  936 ms  CoreCompile                                4 calls
 4583 ms  Rebuild                                    4 calls
12133 ms  Setupkit                                   1 calls
24258 ms  CompileAndTest                             1 calls

您是否尝试过teamcity服务消息,然后您可以将其添加为自定义图形。我不希望更改构建脚本,我希望teamcity可以自己完成这项工作。它已经知道在每个任务中花费了多长时间,我希望它总结类似的任务并绘制一个表或图形。据我所知,不修改构建过程是不可能的,因为构建日志是以内部格式存储的(在
.BuildServer\system\messages
中)。我猜显示的持续时间是通过解析构建日志来完成的(
[HH:mm:ss]:\t
..)。PerfMon之所以有效,是因为监视是在流程级别完成的,每个构建步骤都在一个单独的流程中运行。我看到的唯一方法是:1)通过teamcity-info.xml或服务消息填充自定义构建指标,如James所说,2)使用自定义图表在项目统计信息中显示构建步骤的持续时间。我尝试了这一方法,显然在从命令行构建时有效,但奇怪的是,在TeamCity(v7.1.5)中将开关添加到MSBuild步骤时,不会生成相同的输出摘要。我认为您可以使用命令行生成步骤手动调用MSBuild,但我希望TeamCity能够正确处理命令行参数。