Build-Zeiten in Visual Studio anzeigen?

177

Unser Build-Server benötigt zu lange, um eines unserer C ++ - Projekte zu erstellen. Es verwendet Visual Studio 2008. Gibt es eine Möglichkeit, devenv.com dazu zu bringen, die Zeit zu protokollieren, die zum Erstellen jedes Projekts in der Lösung benötigt wird, damit ich weiß, wo ich meine Bemühungen konzentrieren muss?

Verbesserte Hardware ist in diesem Fall keine Option.

Ich habe versucht, die Ausführlichkeit der Ausgabe festzulegen (unter Extras / Optionen / Projekte und Lösungen / Erstellen und Ausführen / Ausführlichkeit der Ausgabe des MSBuild-Projekts). Dies scheint in der IDE keine Auswirkungen zu haben.

Wenn Sie MSBuild über die Befehlszeile ausführen (und für Visual Studio 2008 muss es MSBuild v3.5 sein), wird die am Ende verstrichene Gesamtzeit angezeigt, jedoch nicht in der IDE.

Ich wollte wirklich einen zeitaufwändigen Bericht für jedes Projekt in der Lösung, damit ich herausfinden konnte, wo der Erstellungsprozess seine Zeit in Anspruch nahm.

Gibt es eine Möglichkeit, NAnt dazu zu bringen, mir die für jeden Schritt benötigte Zeit mitzuteilen, da wir NAnt tatsächlich verwenden, um den Erstellungsprozess voranzutreiben (wir verwenden Jetbrains TeamCity)?

Roger Lipscombe
quelle

Antworten:

205

Menü ExtrasOptionenProjekte und LösungenVC ++ - ProjekteinstellungenBuild Timing sollte funktionieren.

JesperE
quelle
78
Man würde denken, es ist unter "Build and Run", aber nein, das wäre zu einfach gewesen
Thomas Bonini
6
Wenn sie es dort hingelegt hätten, hätte sich jemand anderes beschwert, dass es nicht dort ist, wo sie es erwarten würden. Der naheliegendste Ort, um es auszudrücken, ist für verschiedene Benutzer unterschiedlich.
JesperE
4
Was ist das Ergebnis davon?
Colonel Panic
4
@AndreasBonini: Unter " Erstellen und Ausführen" finden Sie die VBerbosität der MSBuild-Projekt-Build-Ausgabe, die Sie über " Minimal" einstellen können , um auch Timings abzurufen.
Joey
4
Dies ist gut für die Profilerstellung einzelner Aufgaben innerhalb einer Build-Phase, bietet jedoch keine Zusammenfassungen des gesamten Builds.
Fernando Gonzalez Sanchez
88

Gehen Sie zu Extras → Optionen → Projekte und Lösungen → Erstellen und Ausführen → Ausführlichkeit der Ausgabe der MSBuild-Projekterstellung - auf "Normal" oder "Detailliert" eingestellt, und die Erstellungszeit wird im Ausgabefenster angezeigt.

Dave Moore
quelle
2
Vor Visual Studio 2010 verwenden Visual C ++ - Projekte kein MSBuild, daher hat diese Einstellung keine Auswirkungen. Funktioniert jedoch gut für andere Projekttypen.
Roger Lipscombe
23
auf "Normal" anstatt auf "Detailliert" gesetzt ist genug :)
andrecarlucci
7
Dies auf Normal zu setzen ist in der Tat das, was die meisten wollen würden, weil VC ++ - Projekteinstellungen -> Build-Timing viel zu viele Details zeigt
Ghita
1
Dies ist genau das, was die meisten Leute wollen - Gesamtzeit und nicht, dass ClCompile in einem der Projekte 22424 ms benötigt hat. Strg + Q, <Eingabetaste> erstellen und ausführen und zuerst "minimal" in "normal" ändern.
Tomasz Gandor
35

Visual Studio 2012 - 2019

  • Für MSBuild-Projekte (zB alle .Net-Projekte):
    Klicken Sie auf Tools -> Optionsund wählen Sie dann Projects and Solutions -> Build and Run. Wechseln Sie MSBuild project build output verbosityzu Normal. Daher wird in jedem von ihm erstellten Lösungsprojekt die verstrichene Zeit angezeigt. Leider gibt es für das gesamte Projekt keine Summe der verstrichenen Zeit. Sie sehen auch den Zeitstempel für den Start des Builds

  • FÜR C / C ++ - Projekt:

Klicken Sie auf Tools -> Optionsund wählen Sie dann Projects and Solutions -> VC++ Project Settings.

Wechseln Sie Build Timingzu Yes.

Sebastian
quelle
4
Die von Ihnen angebotene Lösung funktioniert für mich in VS 2015 auch für ein C ++ - Projekt. Außerdem verwende ich diese Lösung anstelle von, Build Timingda nur die Gesamtzeit angezeigt wird.
Oder B
1
Keine Änderung mit VS2019. Die gesamte "verstrichene Zeit" wird für alle MSBuild-Projekte (einschließlich C / C ++) angezeigt.
Farway
9

Für Visual Studio 2012 können Sie die Build Monitor- Erweiterung verwenden.

Oliver
quelle
1
Sie können es auch für Visual Studio 2013 und 2015 verwenden.
Shad
6

Wenn Sie mit VS2005 nicht weiterkommen, können Sie das vs-build-timer-Plugin verwenden . Nach Abschluss eines Builds werden die Gesamtzeit und eine (optionale) Zusammenfassung der einzelnen Projektdauern angezeigt.

Haftungsausschluss; Ich schrieb es. Und ja, ich muss einen Installer erstellen ... eines Tages!

MattyT
quelle
Ist Ihr Installer verfügbar
Martin
6

Extras-> Optionen-> Projekte und Lösungen-> Erstellen und Ausführen->

Setzen Sie "Ausführlichkeit der Ausgabe des MSBuild-Projektaufbaus" von "Minimal" auf "Normal".

RaaFFC
quelle
4

Wenn Sie Ihren Build visualisieren möchten, können Sie IncrediBuild verwenden. IncrediBuild ist jetzt im Standalone-Modus (nicht verteilt, aber nur für 8 Kerne auf Ihrem lokalen Computer) als Teil von Visual Studio 2015 Update 1 kostenlos verfügbar

Haftungsausschluss: Ich arbeite für IncrediBuild

Buildops
quelle
4

Da Ihre Frage die Verwendung von DevEnv über die Befehlszeile umfasst, würde ich auch die Verwendung von MSBuild vorschlagen (mit dem SLN-Dateien ohne Änderung erstellt werden können).

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

msbuild /? zeigt Ihnen weitere nützliche Optionen für den Filelogger.

Dave Moore
quelle
4

Ich habe eine Erweiterung erstellt, um die Erstellungszeiten zu messen und die Reihenfolge der Ereignisse in einem Diagramm darzustellen: Visual Studio Build Timer .

Geben Sie hier die Bildbeschreibung ein

Es ist auf dem Marktplatz für visuelle Studios erhältlich und funktioniert für VS2015, VS2017 und VS2019.

Ich finde die visuelle Präsentation sehr hilfreich. Neben der Anzeige, welche Projekte länger dauern, werden auch Abhängigkeiten zwischen ihnen angezeigt, dh Projekte, die darauf warten, dass andere abgeschlossen werden, bevor sie beginnen. Auf diese Weise können Sie Engpässe im Build erkennen und sehen, welche Abhängigkeiten aufgehoben werden müssen, um die Parallelisierung Ihres Builds zu erhöhen.

opetroch
quelle
3
Könnten Sie es bitte aktualisieren, um VS 2019
Konstantin Chernov
3
Ich bin heutzutage ein bisschen beschäftigt, aber es ist in meinen Plänen.
Opetroch
2

Ich bin hier gelandet, weil ich nur das Datum und die Uhrzeit in der Build-Ausgabe haben wollte. Wenn andere nach etwas Ähnlichem suchen, ist es so einfach wie das Hinzufügen echo %date% %time%zu den Pre-Build- und / oder Post-Build-Ereignissen unter Projekt EigenschaftenKompilierenBuild-Ereignisse .

Zwischen den Wochenenden
quelle
2

Führen Sie zuerst einen Build durch und sehen Sie, welches Projekt zuerst in der Build-Ausgabe angezeigt wird ( Ctrl+ Homeim Ausgabefenster). Klicken Sie mit der rechten Maustaste auf das Projekt → ProjekteigenschaftenKompilierenEreignisse erstellenVorab erstellen . Und echo ###########%date% %time%#############.

Jedes Mal, wenn Sie Build-Ergebnisse (oder während des Builds) sehen, tun Sie Ctrl+ Homeim Ausgabefenster. Und irgendwo in diesem Bereich starren Uhrzeit und Datum auf Ihr Gesicht!

Oh, und Sie könnten diese Details zu vielen Projekten hinzufügen, da sich die Erstellungsreihenfolge ändern kann :)


Ich habe eine bessere Lösung gefunden! ###

ExtrasOptionenProjekte und LösungenErstellen und AusführenAusführlichkeit der Ausgabe von MSBuild-Projekterstellungen = Normal (oder höher als Minimal ). Dies fügt die Zeit am Anfang / Anfang des Ausgabefensters hinzu. Ctrl+ Homeim Ausgabefenster sollte reichen.

Wenn wir sehen möchten, wie viel Zeit jedes Projekt benötigt, dann Projekte & LösungenVC ++ - ProjekteinstellungenBuild-Timing = Ja . Es gilt für alle Projekte; "VC ++" ist irreführend.

Blaue Wolken
quelle
1

Wenn Sie ein externes Programm aufrufen möchten, das Ihre gesamten Erstellungszeiten nachverfolgen kann, können Sie die folgende Lösung für VS 2010 (und möglicherweise älter) verwenden. Der folgende Code verwendet CTime von Casey Muratori. Natürlich können Sie damit auch einfach die Erstellungszeit drucken.

Öffnen Sie den Makro-Explorer und fügen Sie Folgendes ein 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

Antwort von hier und hier genommen .

Andreas Haferburg
quelle
1

Optionen -> Projekte und Lösungen -> VC ++ - Projekteinstellungen -> Build-Timing

Geben Sie hier die Bildbeschreibung ein

Wesam
quelle