it-swarm-eu.dev

Anzeigezeiten in Visual Studio anzeigen?

Unser Build-Server dauert zu lange, um eines unserer C++ - Projekte zu erstellen. Es wird Visual Studio 2008 verwendet. Gibt es eine Möglichkeit, devenv.com dazu zu bringen, die Zeit zu protokollieren, die für die Erstellung der einzelnen Projekte in der Lösung benötigt wird, sodass ich weiß, wo ich mich konzentrieren kann?

Verbesserte Hardware ist in diesem Fall keine Option.

Ich habe versucht, die Ausgabeausprägung festzulegen (unter Extras/Optionen/Projekte und Lösungen/Erstellen und Ausführen/MSBuild-Projektausgabeausgabe). Dies scheint in der IDE keine Auswirkung zu haben.

Wenn Sie MSBuild von der Befehlszeile aus 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 für jedes Projekt einen Zeitbericht in der Lösung, damit ich herausfinden kann, wo der Erstellungsprozess seine Zeit in Anspruch nimmt.

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

155
Roger Lipscombe

Menü Extras Optionen Projekte und Lösungen VC++ - Projekteinstellungen Build Timing sollte funktionieren.

177
JesperE

Gehen Sie zu Extras → Optionen → Projekte und Lösungen → Erstellen und Ausführen → Ausführliche Ausgabe des MSBuild-Projekts für den Build - setzen Sie "Normal" oder "Detailliert". Die Buildzeit wird im Ausgabefenster angezeigt.

73
Dave Moore

Visual Studio 2012 bis 2017

  • Für MSBuild-Projekte (z. B. alle .Net-Projekte):
    Klicken Sie auf Tools -> Options und wählen Sie dann Projects and Solutions -> Build and Run____. Ändern Sie MSBuild project build output verbosity in Normal. So wird in jedem von ihm erstellten Lösungsprojekt die abgelaufene Zeit angezeigt. ..... Allerdings gibt es bei allen Projekten leider keine verstrichene Zeitsumme. Sie sehen auch den Build-gestarteten Zeitstempel

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

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

Ändern Sie Build Timing in Yes.

27
Sebastian

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

9
Oliver

Wenn Sie auf VS2005 nicht weiterkommen, können Sie das vs-build-timer-Plugin verwenden. Bei Abschluss eines Builds wird die Gesamtzeit und eine (optionale) Zusammenfassung der Projektdauer angezeigt.

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

5
MattyT

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

Setzen Sie "MSBuild Projekt Build Output Ausführlichkeit" von "Minimal" auf "Normal"

5
RaaFFC

Da Ihre Frage die Verwendung von DevEnv über die Befehlszeile umfasst, würde ich auch die Verwendung von MSBuild vorschlagen (die .sln-Dateien ohne Änderung erstellen kann). 

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

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

4
Dave Moore

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

Disclaimer: Ich arbeite für IncrediBuild

3
buildops

Ich bin hier gelandet, weil ich wollte, dass Datum und Uhrzeit in der Build-Ausgabe enthalten sind. Sollten andere nach etwas Ähnlichem suchen, ist es so einfach, echo %date% %time% zu den Pre-Build- und/oder Post-Build-Ereignissen unter Projekt hinzuzufügen, Eigenschaften Compile Build-Ereignisse .

2

Machen Sie zuerst einen Build und sehen Sie, welches Projekt zuerst in der Build-Ausgabe erscheint (Ctrl + Home im Ausgabefenster). Klicken Sie mit der rechten Maustaste auf das Projekt → ProjekteigenschaftenKompilierenBuildereignisseVorerstellung. Und echo ###########%date% %time%#############.

Also jedes Mal, wenn Sie Build-Ergebnisse sehen (oder während des Builds) Ctrl + Home im Ausgabefenster. Und irgendwo in diesem Bereich sehen Sie Uhrzeit und Datum!

Oh und am Ende könnten Sie 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ührliche Ausgabe für MSBuild-Projekterstellung = Normal (oder höher Minimal). Dies fügt die Zeit am Anfang/Anfang des Ausgabefensters hinzu. Ctrl + Home im ausgabefenster sollte reichen.

Wenn wir sehen möchten, wie viel Zeit jedes Projekt in Anspruch nimmt, dann Projects & SolutionsVC++ Project SettingsBuild Timing = yes. Es gilt für alle Projekte; "VC++" ist irreführend.

2
Blue Clouds

Wenn Sie ein externes Programm aufrufen möchten, das Ihre Gesamtbauzeit 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 die Build-Zeit auch einfach ausdrucken.

Öffnen Sie den Makro-Explorer und fügen Sie vor End Module Folgendes ein:

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 aus hier und hier .

1

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

 enter image description here

0
Wesam

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

 enter image description here

Es ist auf dem Visual Studio-Marktplatz erhältlich und funktioniert für VS2015 und VS2017.

Ich finde die visuelle Darstellung sehr hilfreich. Es zeigt nicht nur, welche Projekte länger dauern, sondern zeigt auch Abhängigkeiten zwischen ihnen, d. Auf diese Weise können Sie Engpässe im Build erkennen und erkennen, welche Abhängigkeiten zu brechen sind, um die Parallelisierung des Builds zu erhöhen.

0
opetroch