Отображение времени сборки в Visual Studio?

наш сервер сборки занимает слишком много времени, чтобы построить один из наших проектов c++. Он использует Visual Studio 2008. Есть ли способ получить devenv.com регистрировать время, необходимое для создания каждого проекта в решении, чтобы я знал, на чем сосредоточить свои усилия?

улучшенное оборудование в этом случае не является вариантом.

Я попытался установить детализацию вывода (в разделе Инструменты / Параметры / проекты и решения / сборка и запуск / MSBuild project build). Это не похоже имеют любой эффект в IDE.

при запуске MSBuild из командной строки (и для Visual Studio 2008 это должен быть MSBuild v3.5), он отображает общее время, прошедшее в конце, но не в IDE.

Мне очень нужен отчет о времени для каждого проекта в решении, чтобы я мог выяснить, где процесс сборки занимает свое время.

альтернативно, поскольку мы фактически используем NAnt для управления процессом сборки( мы используем JetBrains TeamCity), есть ли способ заставить Нэнта сказать мне, сколько времени требуется на каждый шаг?

12 ответов


меню инструментыопциипроекты и решениянастройки проекта VC++Время Сборки должны работать.


перейдите в меню Инструменты → Параметры → проекты и решения → сборка и запуск → MSBuild project build output verbosity-установите значение "Normal" или "Detailed", и время сборки появится в окне вывода.


Visual Studio 2012 до 2017

  • для проектов MSBuild (например, все .Net-проекты):
    Нажмите Tools -> Options и выберите Projects and Solutions -> Build and Run. Изменить MSBuild project build output verbosity to Normal. Таким образом, он будет отображать время, прошедшее в каждом проекте решения, который он строит. Но есть unfortunatily нет времени сумма за весь проект. Вы также увидите начало сборки Timestamp

  • для проекта C / C++:

клик Tools -> Options и выберите Projects and Solutions -> VC++ Project Settings.

изменить Build Timing to Yes.


для Visual Studio 2012 вы можете использовать Построить Монитор


Если вы застряли на VS2005, вы можете использовать vs-build-таймер плагин. По завершении сборки отображается общее затраченное время и (необязательно) сводка по каждой из длительностей проекта.

отказ от ответственности; я это написал. И да, мне нужно создать установщик...один день!


Инструменты- > Параметры - >проекты и решения - >сборка и запуск ->

установите" MSBuild project build output verbosity "от" минимальный " до "нормальный"


поскольку ваш вопрос включает использование DevEnv из командной строки, Я бы также предложил использовать MSBuild (который может строить .sln файлы без изменений).

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

msbuild /? покажет вам другие полезные опции для filelogger.


Если вы хотите визуализировать свою сборку, вы можете использовать IncrediBuild. IncrediBuild теперь доступен в автономном режиме (не распространяется, но для использования только на 8 ядрах на локальном компьютере) бесплатно как часть Visual Studio 2015 Update 1

отказ от ответственности: я работаю на IncrediBuild


я оказался здесь, потому что я просто хотел, чтобы дата и время включен в построение вывода. Если другие ищут что-то подобное, это так же просто, как добавить echo %date% %time% к событиям Pre-build и/или Post-build в рамках проекта, свойства CompileСобытия Построения.


сначала выполните сборку и посмотрите, какой проект появляется первым в выходных данных сборки ( Ctrl + дома в окне "вывод"). Щелкните правой кнопкой мыши этот проект → Свойства ПроектаCompileСобытия Построениясоздать. И echo ###########%date% %time%#############.

поэтому каждый раз, когда вы видите результаты сборки (или при сборке) делать Ctrl + дома в окне вывода. И где-то в этой области Время и дата смотрит на ваше лицо!

О, и вы можете добавить эти данные во многие проекты, поскольку порядок сборки может измениться:)


Я нашел лучшее решение! ###

инструментыопцииПроекты И Решенияпостроить и запуститьMSBuild проект сборки вывода многословие = нормальный (или выше минимальный). Это добавляет время в начало / начало окна вывода. Ctrl + дома в окне вывода должны сделать.

Если мы хотим увидеть, сколько времени занимает каждый проект, то Проекты И Решениянастройки проекта VC++ время сборки = да. Он применим ко всем проектам; "VC++" вводит в заблуждение.


Если вы хотите вызвать внешнюю программу, которая может отслеживать общее время сборки, вы можете использовать следующее решение для VS 2010 (и, возможно, старше). Код ниже использует CTime Кейси Муратори. Конечно, вы также можете использовать его, чтобы просто распечатать время сборки.

Откройте проводник макросов и вставьте следующее Перед 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

ответ взят из здесь и здесь.


параметры - > проекты и решения - > настройки проекта VC++ - > время сборки

enter image description here