2011-10-23 15 views
8

Me gustaría tener una verbosidad diferente para el proyecto msbuild invocado desde la línea de comandos, y aquellos invocados por la tarea MSBuild desde dentro del proyecto. Por ejemplo:¿Cómo cambiar la verbosidad de la tarea MSBuild?

Dentro my.proj:

<Target Name=Foo> 
    <MSBuild Projects="a.csproj;b.csproj;c.csproj"/> 
</Target> 

En la línea de comandos:

msbuild /v:d my.proj 

ahora cuando la tarea de MSBuild construye los archivos Csproj, lo hace con la verbosidad detallado así. Sin embargo, me gustaría construirlo con una mínima verborrea.

Sé que es posible invocar msbuild manualmente de este modo:

<Target Name=Foo> 
    <Exec Command="msbuild /v:m a.csproj"/> 
    <Exec Command="msbuild /v:m b.csproj"/> 
    <Exec Command="msbuild /v:m c.csproj"/> 
</Target> 

o en la práctica

<Target Name=Foo> 
    <Exec Command="msbuild /v:m %(Projectlist.Identity)"/> 
</Target> 

y esto funciona bien fuera de curso, pero entonces no se puede obtener la funcionalidad de la BuildInParallel cambiar más (no creo que sea posible invocar msbuild desde la línea de comandos con múltiples proyectos sin que estén contenidos en una solución?)

Actualización

Fui con la opción de Ludwo: básicamente crear un registrador personalizado que tenga dos ConsoleLoggers como miembro. Uno tiene la verbosidad pasada en la línea de comando, la otra es 'mínima'. El registrador se registra para todos los eventos y los pasa a uno de los registradores dependiendo de si un archivo csproj se está construyendo actualmente o no. La salida se ve exactamente como lo normal, excepto que no incluye miles de líneas de los archivos csproj.

+0

Este post por Scott Hanselman podría iluminarte. http://www.hanselman.com/blog/FasterBuildsWithMSBuildUsingParallelBuildsAndMulticoreCPUs.aspx –

+0

+ lectura interesante.Sin embargo, mis proyectos no están incluidos en las soluciones, por lo que el modificador '/ m' no tiene el mismo efecto que la construcción efectiva de proyectos en paralelo: se siguen construyendo secuencialmente (actualizaré la pregunta para reflejar esto) – stijn

+0

En uno de nuestros proyectos utilizamos MSBuild Sidekick para descubrir cómo construir nuestra jerarquía de productos, tal vez valga la pena echarle un vistazo para ayudar a la parrallización de las tareas también. http://www.attrice.info/msbuild/ Parece extraño que la verbosidad esté acoplada al paralelismo. –

Respuesta

4

tiene dos opciones (por lo menos) :)

  1. Crear un script msbuild adicional para la construcción de proyectos abc "BuildABC.proj"

    <Target Name="BuildABC"> 
         <MSBuild Projects="a.csproj;b.csproj;c.csproj" BuildInParallel="true"/> 
        </Target> 
    

    En su script padres ejecutar utilizando MSBuild Ejecutar tarea y llamar al "BuildABC.proj" con un mínimo de verbosidad

    <Target Name=Foo> 
         <Exec Command="msbuild /v:m /m:2 BuildABC.proj"/> 
        </Target> 
    

    Tiene que pasar explícitamente todas las propiedades principales necesarias en el proyecto BuildABC al parámetro msbuild/p.

  2. Utilice el registrador personalizado. See this how to do it. En este caso se puede usar el guión original:

    <Target Name=Foo> 
        <MSBuild Projects="a.csproj;b.csproj;c.csproj"/> 
    </Target> 
    

    en su registrador de costumbre no registrar todo lo relacionado con, por ejemplo, proyecto "a.csproj" entre ProjectStarted y ProjectFinished eventos donde e.ProjectFile == "a.csproj" (para desactivar el registro de diagnóstico en el proyecto "a.csproj" mientras que la construcción del proyecto de los padres con la verbosidad de diagnóstico)

+0

Sí, ya probé este enfoque, así como volver a llamar al mismo script (por ejemplo, en parent.proj call ''; esto funciona, pero tiene una desventaja * major *: todas las propiedades del script de compilación principal no están disponibles en el otro a menos que se pase explícitamente. Lo cual se convierte en un PITA importante cuando hay muchas propiedades, además cada vez que se agrega uno, debe agregarlo en dos lugares. – stijn

+0

Actualicé mi respuesta;) – Ludwo

+0

¡Gracias! Examinaré la solución de registrador personalizada cuando tenga algo de tiempo, se ve prometedor. – stijn

Cuestiones relacionadas