Ответ 1
Инструменты меню → Параметры → Проекты и решения → Настройки проекта VС++ → Сборка сборки должна работать.
Наш сервер сборки занимает слишком много времени, чтобы построить один из наших проектов на С++. Он использует Visual Studio 2008. Есть ли способ заставить devenv.com регистрировать время, затраченное на создание каждого проекта в решении, чтобы я знал, где сосредоточить свои усилия?
В этом случае улучшенное оборудование не является вариантом.
Я попытался установить объемность вывода (в разделе "Инструменты/Параметры/Проекты и Решения/Сборка и Запуск" / "Расширение вывода проекта" MSBuild). Это не похоже на эффект в среде IDE.
При запуске MSBuild из командной строки (а для Visual Studio 2008 он должен быть MSBuild v3.5), он отображает общее время, прошедшее в конце, но не в IDE.
Мне действительно нужен отчет по времени для каждого проекта в решении, так что я мог бы выяснить, где процесс сборки занимал свое время.
В качестве альтернативы, поскольку мы фактически используем NAnt для управления процессом сборки (мы используем Jetbrains TeamCity), есть ли способ заставить NAnt рассказать мне время, затраченное на каждый шаг?
Инструменты меню → Параметры → Проекты и решения → Настройки проекта VС++ → Сборка сборки должна работать.
Перейдите в Инструменты → Параметры → Проекты и решения → Построить и запустить → Детализация выходных данных сборки проекта MSBuild - установите "Нормальный" или "Детальный", и время сборки появится в окне вывода.
Для проектов 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
.
Для Visual Studio 2012 вы можете использовать расширение Build Monitor.
Инструменты- > Параметры- > Проекты и решения- > Сборка и запуск →
Задайте "многословность сборки проекта MSBuild" от "Minimal" до "Normal"
Если вы застряли на VS2005, вы можете использовать vs-build-timer plugin. По завершении построения он показывает общее время и (необязательное) резюме каждой продолжительности проекта.
Отказ от ответственности; Я написал это. И да, мне нужно создать установщика... один день!
Так как ваш вопрос включает использование DevEnv из командной строки, я бы также предложил использовать MSBuild (который может создавать файлы .sln без модификация).
msbuild /fl /flp:Verbosity=diagnostic Your.sln
msbuild /?
покажет вам другие полезные параметры для файлолога.
Если вы хотите визуализировать свою сборку, вы можете использовать IncrediBuild. IncrediBuild теперь доступен в автономном режиме (не распространяется, но используется только на 8 ядрах на вашем локальном компьютере) бесплатно как часть обновления Visual Studio 2015 1
Отказ от ответственности: я работаю для IncrediBuild
Я оказался здесь, потому что мне просто хотелось, чтобы дата и время включались в вывод сборки. Если другие ищут нечто похожее, это просто, как добавление echo %date% %time%
в события Pre-build и/или Post-build в проекте, Properties → Compile → Build Events.
Сделайте сначала сборку и посмотрите, какой проект появляется первым в выводе сборки (Ctrl + Home в окне вывода). Щелкните правой кнопкой мыши этот проект → Свойства проекта → Скомпилировать → События сборки → Предварительная сборка. И echo ###########%date% %time%#############
.
Поэтому каждый раз, когда вы видите результаты сборки (или во время сборки), делайте Ctrl + Home в окне вывода. И где-то в этой области время и дата смотрят на ваше лицо!
О, и вы можете добавить эти данные во многие проекты, поскольку порядок сборки может измениться:)
Я нашел лучшее решение! ###
Инструменты → Параметры → Проекты и решения → Сборка и запуск → Вывод сборки проекта MSBuild: Нормальный (или выше минимальный). Это добавляет время в начале/в верхней части окна вывода. Ctrl + Home в окне вывода.
Если мы хотим увидеть, сколько времени выполняются каждым проектом, то Проекты и решения → Настройки проекта VС++ → Сроки сборки = да. Он применим ко всем проектам; "VС++" вводит в заблуждение.
Я создал расширение для измерения времени сборки и представления порядка событий на графике: Visual Studio Build Timer.
Он доступен на рынке визуальных студий и работает для VS2015 и VS2017.
Я нахожу визуальное представление весьма полезным. Помимо отображения того, какие проекты занимают больше времени, он также показывает зависимости между ними, то есть проекты, которые ждут завершения других, прежде чем начнутся. Таким образом, вы можете обнаружить узкие места в сборке и увидеть, какие зависимости необходимо разрушить, чтобы увеличить распараллеливание вашей сборки.
Если вы хотите вызвать внешнюю программу, которая может отслеживать общее время сборки, вы можете использовать следующее решение для 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++ Настройки проекта → Время сборки