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

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

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

Я попытался установить объемность вывода (в разделе "Инструменты/Параметры/Проекты и Решения/Сборка и Запуск" / "Расширение вывода проекта" MSBuild). Это не похоже на эффект в среде IDE.

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

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

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

Ответ 1

Инструменты меню → Параметры → Проекты и решения → Настройки проекта VС++ → Сборка сборки должна работать.

Ответ 2

Перейдите в Инструменты → Параметры → Проекты и решения → Построить и запустить → Детализация выходных данных сборки проекта MSBuild - установите "Нормальный" или "Детальный", и время сборки появится в окне вывода.

Ответ 3

Visual Studio 2012 - 2019

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

  • ДЛЯ C/C++ Проект:

Нажмите Tools -> Options, а затем выберите Projects and Solutions -> VC++ Project Settings.

Измените Build Timing на Yes.

Ответ 4

Для Visual Studio 2012 вы можете использовать расширение Build Monitor.

Ответ 5

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

Задайте "многословность сборки проекта MSBuild" от "Minimal" до "Normal"

Ответ 6

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

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

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

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

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


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

Инструменты → Параметры → Проекты и решения → Сборка и запуск → Вывод сборки проекта MSBuild: Нормальный (или выше минимальный). Это добавляет время в начале/в верхней части окна вывода. Ctrl + Home в окне вывода.

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

Ответ 11

Я создал расширение для измерения времени сборки и представления порядка событий на графике: Visual Studio Build Timer.

enter image description here

Он доступен на рынке визуальных студий и работает для VS2015 и VS2017.

Я нахожу визуальное представление весьма полезным. Помимо отображения того, какие проекты занимают больше времени, он также показывает зависимости между ними, то есть проекты, которые ждут завершения других, прежде чем начнутся. Таким образом, вы можете обнаружить узкие места в сборке и увидеть, какие зависимости необходимо разрушить, чтобы увеличить распараллеливание вашей сборки.

Ответ 12

Если вы хотите вызвать внешнюю программу, которая может отслеживать общее время сборки, вы можете использовать следующее решение для 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

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

Ответ 13

Параметры → Проекты и решения → VC++ Настройки проекта → Время сборки

enter image description here