2009-02-24 25 views
7

¿Hay alguna manera de registrar el número de compilaciones realizadas durante un día de desarrollo en Visual Studio, o en cualquier lugar donde podamos conectarnos a algo para acceder a los metadatos?Visual Studio Builds por día

Tengo curiosidad ¿cuántas veces en promedio construyo/día * cuánto tiempo se tarda por acumulación ...

¿Alguna idea?

ACTUALIZACIÓN: Lo siento por la falta de detalles ... y este ejercicio es puramente académico

Con una solución que tiene 14 proyectos diferentes (Figura 1 es un sitio web). Estoy constantemente construyendo la solución completa (Ctrl + Shift + B). Sería interesante descubrir no solo la cantidad de veces que construyo durante el día, sino también cuánto tiempo debo esperar para completar una construcción ...

La solución óptima sería aquella que no requiera una cambiar a los proyectos de la solución en sí. (eventos de compilación pre/post) No quiero tener que agregar/deshacer cambios antes/después de los check-ins.

(El Nant/otra solución está sonando como la respuesta, supongo que podría mapear que a una tecla de acceso directo y no tener que salir de VS para hacer la construcción)

¿Alguna otra sugerencia?

+0

Uso una nota post-it;) –

Respuesta

4

Usa tu macro explorer para crear una nueva macro. Abra la nueva macro y edite el Módulo EnvironmentEvents (puede dejar el otro módulo vacío). Puede usar una base de datos en lugar de un archivo.

Private BuildStopWatch As System.Diagnostics.Stopwatch = New System.Diagnostics.Stopwatch() 

Private Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin 
    BuildStopWatch.Reset() 
    BuildStopWatch.Start() 
End Sub 

Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone 
    BuildStopWatch.Stop() 
    DTE.ToolWindows.OutputWindow.ActivePane.OutputString("Build succeed in " & BuildStopWatch.Elapsed.TotalSeconds & " seconds.") 
    Dim fileName As String = "D:\BuildTimes.txt" 
    Try 
     Dim streamWriter As StreamWriter 
     If File.Exists(fileName) Then 
      streamWriter = File.AppendText(fileName) 
     Else 
      streamWriter = File.CreateText(fileName) 
     End If 

     streamWriter.WriteLine(DateTime.Now.ToString() & " " & "Build Time:" & BuildStopWatch.Elapsed.TotalSeconds) 
     streamWriter.Close() 
     streamWriter.Dispose() 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 
End Sub 
+0

¿Hay algún consejo para que funcione? cuando coloco este script, no veo nada en "OutputWindow" y no se registra ningún archivo ... ¿Hay algo más que deba hacer para conectarlo? Creo que es lo que estoy buscando. –

+0

Ok, encontré mi "sugerencia" para hacerlo funcionar ... Tenía alguna otra macro en una ubicación diferente que parecía causar un conflicto y no permitía que los eventos dispararan. (Comenté todas las macros extra, no estoy seguro de cuál y por qué). –

0

Puede ser excesivo, pero puede escribir su propia utilidad de registro para registrar los metadatos sobre la compilación para cada proyecto. Mantenga un registro del conteo de construcción ese día a través de su clase de registro.

Consulte this link para ampliar MSBuild logging y this link para ampliar MSBuild con tareas personalizadas.

+0

Me ha impresionado lo que puedes hacer con MSBUild. En una compañía para la que trabajé, usamos MSBuild para compilar un montón de código Flex cuando nuestro proyecto principal se terminó de construir, de esa manera, solo teníamos que lanzar una compilación cada día. –

10

Una opción sería crear un par de scripts en su lenguaje de scripting favorito y agregarlos al eventos de compilación previa y posterior de la configuración del proyecto.

Ahora, cada vez que ejecuta una compilación, se ejecutarán las secuencias de comandos y puede hacer que las secuencias de comandos sigan la información que necesite.

Pero, naturalmente, esto solo funcionará en un nivel de proyecto y no automáticamente en todos los proyectos.

+4

Puede usar el paso de preconstrucción para contar el número de compilaciones intentadas y el paso posterior a la compilación para contar el número de construcciones exitosas. –

+4

... y llame al mismo script pre y post para determinar cuánto tiempo tomó la compilación. ;) –

+4

+1. esta iba a ser mi respuesta también. También es bueno que se pueda llamar por separado para cada proj en una solución. Puede ver la cantidad de tiempo que VisStudio omite la construcción de proyectos que no han cambiado. – CodingWithSpike

0

Si está compilando el mismo proyecto cada vez, puede escribir fácilmente un pequeño script para ejecutar en la sección "Tareas previas a la compilación" de las propiedades del proyecto (haga clic en el botón "Crear eventos" en la parte inferior del Pestaña Compilar de la página de propiedades).

0

VS solo le permite enlazarse a eventos de construcción de nivel de proyecto, si esto no es suficiente puede usar un script de compilación (MSBuild, NAnt, etc.) para construir la solución que le dará control total sobre lo que sucede antes y/o después de la construcción.

Para ser sincero, ¿qué beneficio obtendrías de estas estadísticas en una máquina local? Usamos un servidor de compilación CCNET http://ccnet.thoughtworks.com/ que rastrea los tiempos de compilación y los tiempos de prueba de unidades, y se activa después de un compromiso con nuestro SVN de control de origen http://www.collab.net/downloads/subversion/ Recomendaría este enfoque para recopilar estadísticas.

0

Asegúrese de que su módulo EnvironmentsEvents importa el espacio de nombres System.IO para poder acceder a las llamadas StreamWriter y File.