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!
Gracias, un buen consejo. –
bastante detallado? Eso es una subestimación, obtuve 45k líneas de salida de mi construcción con esa bandera. Buena respuesta. –