2009-11-05 15 views
9

Usamos MSBuild de forma bastante extensa como parte de nuestro proceso de integración continua, y aunque es increíblemente potente y podemos hacer prácticamente todas nuestras compilaciones, pruebas e implementaciones dentro de este (utilizando algunas tareas personalizadas), hemos encontrado que depurarlo usar etiquetas es un problema y no siempre nos puede proporcionar suficiente información.¿Cómo puedo depurar (preferiblemente en un IDE) un script de MSBuild?

He encontrado: http://www.wintellect.com/CS/blogs/jrobbins/archive/2007/12/03/msbuild-debuggers.aspx, pero desafortunadamente el proyecto parece haber desaparecido de Codeplex.

¿Alguien tiene alguna idea de si hay algo similar a esto disponible o si hay otra forma/técnica que se puede utilizar?

Gracias.

Respuesta

12

Uso el modificador de línea de comandos /v:diagnostic. MSBuild escupe una salida muy detallada. También puede escupir el resultado detallado a un archivo de registro en lugar de la consola, usando el modificador de línea /fl[n] comando, y luego usar el interruptor /flp[n] (filelogparameter) para especificar el nivel de detalle, por ejemplo, /flp:Verbosity=diagnostic;LogFile=latest_diagnostic.log

Usted tiene que diseñar su crear scripts desde el principio para facilitar la solución de problemas. Haga cosas como:

Haga que cada objetivo sea lo más granular posible, de modo que pueda llamar a cada objetivo individualmente. Esto ayuda a que el proceso de depuración sea mucho más rápido.

Asegúrate de que tus tareas hereden de la clase Microsoft.Build.Utilities.Task. Expone una propiedad de registro que tiene demasiadas funciones de registro. Normalmente me equivoco por el lado de la precaución, use el LogMessage(MessageImportance,string,params object[]). Mis mensajes de depuración reciben una importancia de mensaje de MessageImportance.Low, por lo que solo aparecen cuando el modo de verbosidad es de diagnóstico.

Use System.Diagnostics.Trace.WriteLine para enviar mensajes que tengan un nivel de registro demasiado bajo. Yo uso DebugView para mirar esos mensajes.

Por último, intente no hacer cosas realmente complicadas en el propio script MSBuild. MSBuild se destaca en la administración de dependencias, listas de archivos y tareas en ejecución. Cualquier cosa más complicada o avanzada se debe mover a tareas personalizadas escritas en su lenguaje de elección de .NET. Esto tiene el beneficio adicional de hacer que las cosas mucho sean más fáciles de depurar. Cuando tenga su lógica en el código, puede usar el método System.Diagnostics.Debugger.Launch(), que le permitirá conectar MSBuild al depurador en una instancia en ejecución de Visual Studio (con suerte una que ya tenga cargada su tarea personalizada).

¡Buena suerte!

+0

Gracias, un buen consejo. –

+0

bastante detallado? Eso es una subestimación, obtuve 45k líneas de salida de mi construcción con esa bandera. Buena respuesta. –

1

También podría echar un vistazo a la excelente aplicación comercial (con 14 días de prueba) MSBuild Sidekick at Attrice Corp para depurar su MSBuild-script.

Cuestiones relacionadas