在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告诉我每一步的时间?
菜单工具 → 选项 → 项目和解决scheme → VC ++项目设置 → 生成时间应该工作。
工具…选项…项目和解决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时间,那么项目和解决scheme → VC ++项目设置 → 生成时间=是 。 它适用于所有项目; “VC ++”是误导性的。