Відображення строків збірки у Visual Studio?


177

Наш сервер збирання займає занадто багато часу, щоб створити один з наших проектів на C ++. Він використовує Visual Studio 2008. Чи є спосіб зробити так, щоб devenv.com записувати час, необхідний для побудови кожного проекту в рішенні, щоб я знав, куди зосередити свої зусилля?

Удосконалене обладнання в цьому випадку не є можливим.

Я спробував встановити багатозвучність виводу (у розділі Інструменти / Параметри / Проекти та рішення / Створити та запустити / MSBuild проект збільшити багатовісний вихід). Це, мабуть, не впливає на IDE.

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

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

Крім того, оскільки ми насправді використовуємо NAnt для керування процесом збирання (ми використовуємо Jetbrains TeamCity), чи існує спосіб, щоб NAnt повідомив мені час, витрачений на кожен крок?

Відповіді:


205

Інструменти меню → ОпціїПроекти та рішенняНалаштування проекту VC ++Час побудови повинен працювати.


78
Можна було б подумати, що це в розділі "Побудувати та запустити", але nooooo, все було б просто
Томас Боніні

6
Якби вони там помістили, хтось інший поскаржився б, що це не те, де вони очікували б цього. Найбільш очевидним місцем його розміщення є різне для різних користувачів.
JesperE

4
Який результат цього?
Полковник Паніка

4
@AndreasBonini: У розділі Build and Run ви знайдете вихідний проект збірки проекту MSBuild, який ви можете встановити вище мінімального, щоб отримати і терміни.
Joey

4
Це добре для профілювання окремих завдань на етапі збирання, але не дає резюме всього складання.
Фернандо Гонсалес Санчес

88

Перейдіть до Інструменти → Опції → Проекти та рішення → Збірка та запуск → MSBuild проекту збірка багатослівного виводу - встановіть на «Нормальний» або «Детально», і час складання з’явиться у вікні виводу.


2
До Visual Studio 2010 проекти Visual C ++ не використовують MSBuild, тому ця настройка не впливає. Хоча добре працює і для інших типів проектів.
Роджер Ліпскомб

23
встановлено "Нормально" замість "Детально" достатньо :)
andrecarlucci

7
Налаштування цього параметра "Нормальне" - це дійсно те, що найбільше хотілося б, оскільки "Налаштування проекту VC ++" -> "Час побудови" показує занадто багато деталей
Ghita

1
Саме цього хочуть більшість людей - загальний час, а не те, що ClCompile взяла 22424 мс в одному з проектів. Ctrl + Q, побудуйте та запустіть <Enter> та змініть спочатку "мінімальний" на "нормальний".
Томаш Гандор

36

Візуальна студія 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
Пропоноване вами рішення працює для мене в VS 2015 і для проекту C ++. Крім того, я вирішу використовувати це рішення замість того, що Build Timingвоно відображає лише загальний час.
Або Б

1
Без змін у VS2019 Загальний "пройдений час" показаний для всіх проектів MSBuild (включаючи C / C ++).
Farway

9

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


1
Ви можете також використовувати його для Visual Studio 2013 та 2015 років.
Шад

6

Якщо ви застрягли на VS2005, ви можете використовувати плагін vs-build-timer . Після завершення складання він показує загальний витрачений час та (необов'язково) підсумок кожної тривалості проекту.

Відмова від відповідальності; Я це написав. І так, мені потрібно створити інсталятор ... одного дня!


Чи доступний ваш інсталятор
Мартін

6

Інструменти-> Параметри-> Проекти та рішення-> Створити та запустити->

Встановіть "MSBuild проекту побудови вихідної багатозвучності" з "Мінімальний" на "Нормальний"


4

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

Відмова: Я працюю в IncrediBuild


4

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

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

msbuild /? покаже вам інші корисні варіанти файлового журналу.


4

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

введіть тут опис зображення

Він доступний на ринку візуальних студій та працює для VS2015, VS2017 та VS2019.

Я вважаю візуальну презентацію досить корисною. Крім показу, які проекти займають більше часу, він також показує залежності між ними, тобто проекти, які чекають, коли інші завершаться до їх початку. Таким чином ви можете помітити вузькі місця в збірці і побачити, які залежності потрібно розірвати, щоб збільшити паралелізацію вашої збірки.


3
Чи можете ви, будь ласка, оновити його для підтримки VS 2019
Костянтин Чернов,

3
Я трохи зайнятий в ці дні, але це в моїх планах.
opetroch

2

Я закінчився тут, тому що просто хотів, щоб дата та час були включені у вихідні дані збірки. Якщо інші шукають щось подібне, це так просто, як додавання echo %date% %time%до подій перед складанням та / або після збирання в рамках проекту, ВластивостіКомпілюватиПодії збирання .


2

Створіть спочатку збірку та подивіться, який проект з’являється першим у виході збірки ( Ctrl+ Homeу вікні виводу). Клацніть правою кнопкою миші проект → Властивості проектуКомпілюватиПобудувати подіїПопередньо скласти . І echo ###########%date% %time%#############.

Тому кожен раз, коли ви бачите результати збірки (або під час збирання), робіть Ctrl+ Homeу вікні виводу. А десь у цій місцевості час і дата дивляться на ваше обличчя!

О, і ви можете, нарешті, додати ці деталі до багатьох проектів, оскільки порядок збирання може змінитися :)


Я знайшов краще рішення! ###

ІнструментиОпціїПроекти та рішенняПобудувати і запуститиMSBuild проекту збільшить вихідний багатослівник = Нормальний (або вище Мінімального ). Це додає час на початку / вгорі вікна виводу. Ctrl+ Homeу вікні виводу слід робити.

Якщо ми хочемо побачити, скільки часу займає кожен проект, тоді Проекти та рішенняПараметри проекту VC ++Створення часу = так . Це стосується всіх проектів; "VC ++" вводить в оману.


1

Якщо ви хочете викликати зовнішню програму, яка може відстежувати загальний час складання, ви можете скористатися наступним рішенням для VS 2010 (а може бути і старшого). У наведеному нижче коді використовується CTime від Casey Muratori. Звичайно, ви також можете використовувати його для простого друку часу на збірку.

Відкрийте провідник макросів і вставте раніше 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

Відповідь взята звідси і звідси .


1

Опції -> Проекти та рішення -> Параметри проекту VC ++ -> Створення часу

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.