Отображение времени сборки в Visual Studio?
-
09-06-2019 - |
Вопрос
Нашему серверу сборки требуется слишком много времени для создания одного из наших проектов на C ++.Он использует Visual Studio 2008.Есть ли какой-нибудь способ заставить devenv.com регистрировать время, затраченное на создание каждого проекта в решении, чтобы я знал, на чем сосредоточить свои усилия?
Улучшенное аппаратное обеспечение в данном случае не является вариантом.
Я попытался настроить детализацию вывода (в разделе Инструменты / Параметры / Проекты и решения / Сборка и запуск / Детализация вывода проекта MSBuild build).Похоже, это не оказывает никакого эффекта в IDE.
При запуске MSBuild из командной строки (а для Visual Studio 2008 это должна быть MSBuild версии v3.5) в конце отображается общее время, прошедшее, но не в IDE.
Мне действительно нужен был отчет о затраченном времени для каждого проекта в решении, чтобы я мог понять, на что уходит время процесса сборки.
В качестве альтернативы, поскольку мы фактически используем NAnt для управления процессом сборки (мы используем Jetbrains TeamCity), есть ли способ заставить NAnt сообщать мне время, затраченное на каждый шаг?
Решение
Меню Инструменты → Опции → Проекты и решения → Настройки проекта VC ++ → Время сборки должно сработать.
Другие советы
Перейдите в меню Инструменты → Параметры → Проекты и решения → Сборка и запуск → Детализация вывода сборки проекта MSBuild - установите значение "Обычный" или "Подробный", и время сборки появится в окне вывода.
Visual Studio с 2012 по 2017 год
Для проектов MSBuild (например,ВСЕ.Сетевые проекты):
Щелчок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
.
Для Visual Studio 2012 вы могли бы использовать Монитор сборки расширение.
Если вы застряли на VS2005, вы могли бы использовать плагин vs-build-timer.По завершении сборки отображается общее затраченное время и (необязательно) сводка по каждой продолжительности проекта.
Отказ от ответственности;Я написал это.И да, мне нужно создать установщик...однажды!
Инструменты->Параметры-> Проекты и решения-> Сборка и запуск->
Установите значение "Детализация выходных данных MSBuild project build" с "Минимального" на "Нормальный".
Поскольку ваш вопрос связан с использованием DevEnv из командной строки, я бы также предложил использовать MSBuild (который может создавать файлы .sln без изменений).
msbuild /fl /flp:Verbosity=diagnostic Your.sln
msbuild /?
я покажу вам другие полезные опции для filelogger.
Если вы хотите визуализировать свою сборку, вы можете использовать IncrediBuild.IncrediBuild теперь доступен в автономном режиме (не распространяется, но для использования только на 8 ядрах на вашем локальном компьютере) бесплатно как часть обновления 1 Visual Studio 2015
Отказ от ответственности:Я работаю в IncrediBuild
Я оказался здесь, потому что просто хотел, чтобы дата и время были включены в выходные данные сборки.Если другие ищут что-то подобное, это так же просто, как добавить echo %date% %time%
к событиям до сборки и / или после сборки в рамках проекта, Свойства → Скомпилировать → Создание событий.
Сначала выполните сборку и посмотрите, какой проект появляется первым в выходных данных сборки (Ctrl + Главная в окне вывода).Щелкните правой кнопкой мыши по этому проекту → Свойства проекта → Скомпилировать → Создание событий → Предварительная сборка.И echo ###########%date% %time%#############
.
Поэтому каждый раз, когда вы видите результаты сборки (или во время сборки), делайте Ctrl + Главная в окне вывода.И где-то в этой области время и дата смотрят вам в лицо!
О, и, возможно, в конечном итоге вам придется добавлять эти детали во многие проекты, поскольку порядок сборки может измениться :)
Я нашел лучшее решение!###
Инструменты → Опции → Проекты и решения → Сборка и запуск → Детализация выходных данных сборки проекта MSBuild = Нормальный (или выше Минимальный).Это добавляет время в начало / начало окна вывода. Ctrl + Главная в окне вывода следует выполнить.
Если мы хотим посмотреть, сколько времени занимает каждый проект, то Проекты и решения → Настройки проекта VC ++ → Время сборки = да.Это применимо ко всем проектам;"VC++" вводит в заблуждение.
Если вы хотите вызвать внешнюю программу, которая может отслеживать общее время сборки, вы можете использовать следующее решение для версии 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
Я создал расширение для измерения времени сборки и представления порядка событий в виде графика: Таймер сборки Visual Studio.
Он доступен на Visual Studio market place и работает для VS2015 и VS2017.
Я нахожу визуальную презентацию весьма полезной.Помимо показа того, какие проекты занимают больше времени, он также показывает зависимости между ними, т.е.проекты, которые ждут завершения других, прежде чем начать.Таким образом, вы можете выявить узкие места в сборке и увидеть, какие зависимости необходимо устранить, чтобы увеличить распараллеливание вашей сборки.