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?
Menü Extras → Optionen → Projekte und Lösungen → VC++ - Projekteinstellungen → Build Timing sollte funktionieren.
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.
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
.
Für Visual Studio 2012 können Sie die Erweiterung Build Monitor verwenden.
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!
Extras-> Optionen-> Projekte und Lösungen-> Erstellen und Ausführen->
Setzen Sie "MSBuild Projekt Build Output Ausführlichkeit" von "Minimal" auf "Normal"
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.
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
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 .
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 → Projekteigenschaften → Kompilieren → Buildereignisse → Vorerstellung. 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! ###
Extras → Optionen → Projekte und Lösungen → Erstellen und Ausführen → Ausfü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 & Solutions → VC++ Project Settings → Build Timing = yes. Es gilt für alle Projekte; "VC++" ist irreführend.
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
Ich habe eine Erweiterung erstellt, um die Buildzeiten zu messen und die Reihenfolge der Ereignisse in einem Diagramm darzustellen: Visual Studio Build Timer .
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.