Afficher les temps de construction dans Visual Studio?




msbuild properties (8)

Visual Studio 2015, 2013 et 2012

  • Pour les projets MSBuild (par exemple tous les projets .Net):
    Cliquez sur Tools -> Options , puis sélectionnez Projects and Solutions -> Build and Run . Modifiez MSBuild project build output verbosity à Normal . Ainsi, il affichera le temps écoulé dans chaque projet de solution qu'il construit. Mais il n'y a malheureusement pas de somme de temps écoulée sur tout le projet. Vous verrez également le Build Timestamp commencé

  • Pour le projet C / C ++:

Cliquez sur Tools -> Options , puis sélectionnez Projects and Solutions -> VC++ Project Settings .

Changer le Build Timing à Yes .

Notre serveur de construction prend trop de temps pour construire l'un de nos projets C ++. Il utilise Visual Studio 2008. Y a-t-il un moyen pour que devenv.com enregistre le temps nécessaire pour construire chaque projet dans la solution, afin que je sache où concentrer mes efforts?

Le matériel amélioré n'est pas une option dans ce cas.

J'ai essayé de définir la verbosité de sortie (sous Outils / Options / Projets et Solutions / Construire et Exécuter / MSBuild la sortie de la construction du projet). Cela ne semble pas avoir d'effet dans l'IDE.

Lors de l'exécution de MSBuild à partir de la ligne de commande (et, pour Visual Studio 2008, il doit être MSBuild v3.5), il affiche le temps total écoulé à la fin, mais pas dans l'EDI.

Je voulais vraiment un rapport chronologique pour chaque projet dans la solution, afin que je puisse comprendre où le processus de construction prenait son temps.

Alternativement, puisque nous utilisons réellement NAnt pour piloter le processus de construction (nous utilisons Jetbrains TeamCity), y a-t-il un moyen pour que NAnt me dise le temps nécessaire pour chaque étape?


Effectuez d'abord une construction et voyez quel projet apparaît en premier dans la sortie de construction ( Ctrl + Home dans la fenêtre de sortie). Faites un clic droit sur ce projet → Propriétés du projetCompilerConstruire des événementsPré-construction . Et echo ###########%date% %time%############# .

Donc, chaque fois que vous voyez des résultats de construction (ou pendant la construction) faites Ctrl + Home dans la fenêtre de sortie. Et quelque part dans cette région, l'heure et la date regardent votre visage!

Oh, et vous pourriez finir par ajouter ces détails à de nombreux projets, car l'ordre de construction peut changer :)

J'ai trouvé une meilleure solution! ###

OutilsOptionsProjets et solutionsConstruire et exécuterMSBuild build build verbosity = Normal (ou au-dessus de Minimal ). Cela ajoute l'heure au début / haut de la fenêtre de sortie. Ctrl + Accueil dans la fenêtre de sortie devrait faire.

Si nous voulons voir combien de temps chaque projet prend alors Projets et SolutionsParamètres du projet VC ++Build Timing = yes . Il est applicable à tous les projets; "VC ++" est trompeur.


Menu OutilsOptionsProjets et solutionsParamètres du projet VC ++ → Le calendrier de construction devrait fonctionner.


Outils ... Options ... Projets et solutions .... MSBuild build verbosity de sortie du projet - mis à "Normal" ou "Detailed", et l'heure de construction apparaîtra dans la fenêtre de sortie


Pour Visual Studio 2012, vous pouvez utiliser l'extension Build Monitor .


Puisque votre question implique l'utilisation de DevEnv depuis la ligne de commande, je suggère également d'utiliser MSBuild (qui peut générer des fichiers .sln sans modification).

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

msbuild /? vous montrera d'autres options utiles pour le filelogger.


Si vous souhaitez appeler un programme externe capable de suivre vos temps de construction totaux, vous pouvez utiliser la solution suivante pour VS 2010 (et peut-être plus ancienne). Le code ci-dessous utilise CTime de Casey Muratori. Bien sûr, vous pouvez également l'utiliser pour imprimer simplement le temps de construction.

Ouvrez l'explorateur de macros et collez le texte suivant avant le 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

Réponse prise d' here et here .


Si vous voulez visualiser votre construction, vous pouvez utiliser IncrediBuild. IncrediBuild est maintenant disponible en mode autonome (non distribué mais à utiliser uniquement sur 8 cœurs sur votre machine locale) gratuitement dans le cadre de Visual Studio 2015 Update 1

Disclaimer: Je travaille pour IncrediBuild





build-process