在Visual Studio中显示构build时间?

我们的构build服务器花了太长时间来构build我们的C ++项目之一。 它使用Visual Studio 2008.是否有任何方法让devenv.comlogging在解决scheme中构build每个项目所需的时间,以便我知道在哪里集中精力?

在这种情况下改进的硬件不是一个选项。

我已经尝试设置输出详细程度(在工具/选项/项目和解决scheme/生成和运行/ MSBuild项目生成输出冗长)。 这在IDE中似乎没有任何影响。

从命令行运行MSBuild时(对于Visual Studio 2008,它需要为MSBuild v3.5),它显示最后总时间,但不显示在IDE中。

我真的很想为解决scheme中的每个项目提供一个耗时的报告,以便我能够弄清楚构build过程在哪里花费时间。

另外,因为我们实际上使用NAnt来驱动构build过程(我们使用Jetbrains TeamCity),有没有办法让NAnt告诉我每一步的时间?

菜单工具选项项目和解决schemeVC ++项目设置生成时间应该工作。

工具…选项…项目和解决scheme…. MSBuild项目build立输出详细 – 设置为“正常”或“详细”,生成时间将出现在输出窗口

Visual Studio 2015,2013和2012

  • 对于MSBuild项目(例如所有.Net项目):
    单击Tools -> Options ,然后selectProjects and Solutions -> Build and Run 。 将MSBuild project build output verbosity更改为Normal 。 因此,它将在其构build的每个解决scheme项目中显示Time Elapsed。 但是所有的项目都没有经过时间的总结。 您还将看到Build started Timestamp

  • 对于C / C ++项目:

点击Tools -> Options ,然后selectProjects and Solutions -> VC++ Project Settings

Build Timing更改为Yes

对于Visual Studio 2012,您可以使用Build Monitor扩展。

如果你停留在VS2005上,你可以使用vs-build-timer插件 。 在完成build设时,它显示了所花费的总时间和每个项目持续时间的(可选)摘要。

免责声明; 我写的。 是的,我需要创build一个安装程序…有一天!

工具 – >选项 – >项目和解决scheme – >构build和运行 – >

将“MSBuild项目生成输出详细”从“最小”设置为“正常”

既然你的问题涉及从命令行使用DevEnv,我也build议使用MSBuild (它可以不修改地生成.sln文件)。

 msbuild /fl /flp:Verbosity=diagnostic Your.sln 

msbuild /? 会告诉你其他有用的选项的文件logging器。

如果你想显示你的构build,你可以使用IncrediBuild。 作为Visual Studio 2015 Update 1的一部分,IncrediBuild现在可以在独立模式下使用(不是分布式的,只能在本地机器的8个内核上使用)

免责声明:我为IncrediBuild工作

我在这里结束了,因为我只想要包含在构build输出中的date和时间。 其他人应该search类似的东西,就像在项目, 属性编译构build事件下为预生成和/或生成后生成事件添加echo %date% %time%一样简单。

如果你想调用一个外部程序,可以跟踪你的总构build时间,你可以使用VS 2010的以下解决scheme(也许更老)。 下面的代码使用Casey Muratori的CTime。 当然你也可以用它来简单地打印编译时间。

打开macros浏览器,并在End Module之前粘贴以下内容:

 Dim buildStart As Date Private Sub RunCtime(ByVal StartRatherThanEnd As Boolean) Dim Arg As String Dim psi As New System.Diagnostics.ProcessStartInfo("ctime.exe") If StartRatherThanEnd Then psi.Arguments = "-begin" Else psi.Arguments = "-end" End If psi.Arguments += " c:\my\path\build.ctm" psi.RedirectStandardOutput = False psi.WindowStyle = ProcessWindowStyle.Hidden psi.UseShellExecute = False psi.CreateNoWindow = True Dim process As System.Diagnostics.Process process = System.Diagnostics.Process.Start(psi) Dim myOutput As System.IO.StreamReader = process.StandardOutput process.WaitForExit(2000) If process.HasExited Then Dim output As String = myOutput.ReadToEnd WriteToBuildWindow("CTime output: " + output) End If End Sub Private Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin WriteToBuildWindow("Build started!") buildStart = Date.Now RunCtime(True) End Sub Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone Dim buildTime = Date.Now - buildStart WriteToBuildWindow(String.Format("Total build time: {0} seconds", buildTime.ToString)) RunCtime(False) End Sub Private Sub WriteToBuildWindow(ByVal message As String) Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput) Dim ow As OutputWindow = CType(win.Object, OutputWindow) If (Not message.EndsWith(vbCrLf)) Then message = message + vbCrLf End If ow.OutputWindowPanes.Item("Build").OutputString(message) End Sub 

从这里和这里采取答案。

首先进行构build,看看哪个项目首先出现在构build输出中(输出窗口中的Ctrl + Home )。 右键单击该项目→ 项目属性编译生成事件 生成 。 和echo ###########%date% %time%#############

因此,每次看到构build结果(或在构build过程中),请在输出窗口中执行Ctrl + Home 。 在那个地方的某个地方,时间和date凝视着你的脸!

哦,你可能最终将这些细节添加到许多项目,因为构build顺序可以改变:)


我find了更好的解决scheme! ###

工具选项项目和解决scheme生成并运行MSBuild项目 生成 输出详细度 =正常(或最小值以上)。 这会在输出窗口的开始/顶部添加时间。 在输出窗口中的Ctrl + Home应该做的。

如果我们想看看每个项目需要多less时间,那么项目和解决schemeVC ++项目设置生成时间=是 。 它适用于所有项目; “VC ++”是误导性的。