Compartir a través de


Tarea de MSBuild

Compila proyectos de MSBuild desde otro proyecto de MSBuild.

Parámetros

En la tabla siguiente se describen los parámetros de la tarea MSBuild.

Parámetro Descripción
BuildInParallel Parámetro de Boolean opcional.

Si true, los proyectos especificados en el parámetro Projects se compilan en paralelo si es posible. El valor predeterminado es false.
Projects Parámetro ITaskItem[] obligatorio.

Especifica los archivos de proyecto que se van a compilar.
Properties Parámetro de String opcional.

Lista delimitada por punto y coma de pares nombre-valor de propiedad que se van a aplicar como propiedades globales al proyecto secundario. Al especificar este parámetro, es funcionalmente equivalente a establecer las propiedades que tienen el modificador -property -property al compilar con MSBuild.exe. Por ejemplo:

Properties="Configuration=Debug;Optimize=$(Optimize)"

Al pasar propiedades al proyecto a través del parámetro Properties, MSBuild podría crear una nueva instancia del proyecto incluso si el archivo del proyecto ya se ha cargado. MSBuild crea una única instancia de proyecto para una ruta de acceso de proyecto determinada y un conjunto único de propiedades globales. Por ejemplo, este comportamiento permite crear varias tareas de MSBuild que llaman a myproject.proj, con Configuration=Release y obtiene una única instancia de myproject.proj (si no se especifican propiedades únicas en la tarea). Si especifica una propiedad que MSBuild aún no ha visto, MSBuild crea una nueva instancia del proyecto, que se puede compilar en paralelo con otras instancias del proyecto. Por ejemplo, una configuración de versión puede compilar al mismo tiempo que una configuración de depuración.
RebaseOutputs Parámetro de Boolean opcional.

Si true, las rutas de acceso relativas de los elementos de salida de destino de los proyectos compilados tienen sus rutas de acceso ajustadas para que sean relativas al proyecto que llama. El valor predeterminado es false.
RemoveProperties Parámetro de String opcional.

Especifica el conjunto de propiedades globales que se van a quitar.
RunEachTargetSeparately Parámetro de Boolean opcional.

Si true, la tarea MSBuild invoca cada destino de la lista que se pasa a MSBuild de uno en uno, en lugar de al mismo tiempo. Establecer este parámetro en true garantiza que se invocan destinos posteriores incluso si se han producido errores en los destinos invocados anteriormente. De lo contrario, un error de compilación detendría la invocación de todos los destinos posteriores. El valor predeterminado es false.
SkipNonexistentProjects Parámetro de Boolean opcional.

Si true, se omiten los archivos de proyecto que no existen en el disco. De lo contrario, estos proyectos provocarán un error. Tiene como valor predeterminado false.
SkipNonexistentTargets Parámetro de Boolean opcional.

Si true, se omiten los archivos de proyecto que existen, pero que no contienen el Targets con nombre. De lo contrario, estos proyectos provocarán un error. Tiene como valor predeterminado false. Se introdujo en MSBuild 15.5.
StopOnFirstFailure Parámetro de Boolean opcional.

Si true, cuando uno de los proyectos no se compila, no se compilan más proyectos. Actualmente, esta opción no se admite al compilar en paralelo (con varios procesadores).
TargetAndPropertyListSeparators Parámetro de String[] opcional.

Especifica una lista de destinos y propiedades como Project metadatos de elementos). Los separadores no soncapados antes del procesamiento. Por ejemplo, %3B (un escape ';') se trata como si fuera un ';' sin escape.
TargetOutputs Opcional ITaskItem[] parámetro de salida de solo lectura.

Devuelve las salidas de los destinos compilados de todos los archivos de proyecto. Solo se devuelven las salidas de los destinos especificados, no las salidas que pueden existir en los destinos de los que dependen esos destinos.

El parámetro TargetOutputs también contiene los metadatos siguientes:

- MSBuildSourceProjectFile: el archivo de proyecto de MSBuild que contiene el destino que establece las salidas.
- MSBuildSourceTargetName: destino que establece las salidas. Nota: Si desea identificar las salidas de cada archivo de proyecto o destino por separado, ejecute la tarea MSBuild por separado para cada archivo de proyecto o destino. Si ejecuta la tarea MSBuild solo una vez para compilar todos los archivos de proyecto, las salidas de todos los destinos se recopilan en una matriz.
Targets Parámetro de String opcional.

Especifica el destino o los destinos que se van a compilar en los archivos del proyecto. Use un punto y coma para separar una lista de nombres de destino. Si no se especifica ningún destino en la tarea MSBuild, se compilan los destinos predeterminados especificados en los archivos de proyecto. Nota: Los destinos deben aparecer en todos los archivos del proyecto. Si no lo hacen, se produce un error de compilación.
ToolsVersion Parámetro de String opcional.

Especifica el ToolsVersion que se va a usar al compilar proyectos pasados a esta tarea.

Habilita una tarea de MSBuild para compilar un proyecto que tenga como destino una versión diferente de .NET Framework que la especificada en el proyecto. Los valores válidos son 2.0, 3.0 y 3.5. El valor predeterminado es 3.5.

Observaciones

Además de los parámetros enumerados anteriormente, esta tarea hereda los parámetros de la clase TaskExtension, que hereda de la clase Task. Para obtener una lista de estos parámetros adicionales y sus descripciones, consulte clase base TaskExtension.

A diferencia del uso de la tarea Exec para iniciar MSBuild.exe, esta tarea usa el mismo proceso de MSBuild para compilar los proyectos secundarios. La lista de destinos ya creados que se pueden omitir se comparte entre las compilaciones primarias y secundarias. Esta tarea también es más rápida porque no se crea ningún nuevo proceso de MSBuild.

Esta tarea no solo puede procesar archivos de proyecto, sino también archivos de solución. En MSBuild 17.12 y versiones posteriores, se aceptan tanto .slnx como .sln formatos de archivo de solución.

Cualquier configuración requerida por MSBuild para permitir que los proyectos se compilen al mismo tiempo, incluso si la configuración implica infraestructura remota (por ejemplo, puertos, protocolos, tiempos de espera, reintentos, etc.), debe configurarse mediante un archivo de configuración. Cuando sea posible, los elementos de configuración deben poder especificarse como parámetros de tarea en la tarea MSBuild.

A partir de MSBuild 3.5, los proyectos de solución ahora exponen TargetOutputs de todos los subproyectos que compila.

Pasar propiedades a proyectos

En versiones de MSBuild anteriores a MSBuild 3.5, pasar diferentes conjuntos de propiedades a proyectos diferentes enumerados en el elemento de MSBuild era difícil. Si usó el atributo Properties de la tarea de MSBuild , su configuración se aplicó a todos los proyectos que se compilan a menos que haya procesado por lotes la tarea de MSBuild y proporcionó condicionalmente propiedades diferentes para cada proyecto de la lista de elementos.

Sin embargo, MSBuild 3.5 proporciona dos nuevos elementos de metadatos reservados, Propiedades y AdditionalProperties, que proporcionan una manera flexible de pasar propiedades diferentes para distintos proyectos que se compilan mediante la tarea de MSBuild .

Nota:

Estos nuevos elementos de metadatos solo se aplican a los elementos pasados en el atributo Projects de la tarea de MSBuild de .

Ventajas de compilación de varios procesadores

Una de las principales ventajas de usar estos nuevos metadatos se produce al compilar los proyectos en paralelo en un sistema de varios procesadores. Los metadatos permiten consolidar todos los proyectos en una sola tarea de MSBuild llamada sin tener que realizar tareas de MSBuild ni procesamiento por lotes ni condicionales. Y cuando se llama a una sola tarea de MSBuild, todos los proyectos enumerados en el atributo Projects se compilan en paralelo. (Sin embargo, solo si el atributo BuildInParallel=true está presente en la tarea de MSBuild ). Para obtener más información, consulte Compilación de varios proyectos en paralelo.

Metadatos de propiedades

Cuando se especifica, los metadatos de propiedades invalidan el parámetro Properties de la tarea, mientras que AdditionalProperties metadatos se anexan a las definiciones del parámetro.

Un escenario común es cuando se compilan varios archivos de solución mediante la tarea de MSBuild , solo con configuraciones de compilación diferentes. Puede que quiera compilar la solución a1 mediante la configuración de depuración y la solución a2 mediante la configuración de versión. En MSBuild 2.0, este archivo de proyecto tendría el siguiente aspecto:

Nota:

En el ejemplo siguiente, "..." representa archivos de solución adicionales.

a.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Build">
        <MSBuild Projects="a1.sln..." Properties="Configuration=Debug"/>
        <MSBuild Projects="a2.sln" Properties="Configuration=Release"/>
    </Target>
</Project>

Sin embargo, mediante los metadatos de propiedades, puede simplificar este código para usar una única tarea de MSBuild , como se muestra en el ejemplo siguiente:

a.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <ProjectToBuild Include="a1.sln...">
            <Properties>Configuration=Debug</Properties>
        </ProjectToBuild>
        <ProjectToBuild Include="a2.sln">
            <Properties>Configuration=Release</Properties>
        </ProjectToBuild>
    </ItemGroup>
    <Target Name="Build">
        <MSBuild Projects="@(ProjectToBuild)"/>
    </Target>
</Project>

- o -

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <ProjectToBuild Include="a1.sln..."/>
        <ProjectToBuild Include="a2.sln">
            <Properties>Configuration=Release</Properties>
        </ProjectToBuild>
    </ItemGroup>
    <Target Name="Build">
        <MSBuild Projects="@(ProjectToBuild)"
          Properties="Configuration=Debug"/>
    </Target>
</Project>

Metadatos de AdditionalProperties

Tenga en cuenta el siguiente escenario en el que va a crear dos archivos de solución mediante la tarea de MSBuild , ambos con la configuración de versión, pero uno con la arquitectura x86 y la otra mediante la arquitectura ia64. En MSBuild 2.0, tendría que crear varias instancias de la tarea MSBuild: una para compilar el proyecto mediante la configuración de versión con la arquitectura x86, la otra que usa la configuración de versión con la arquitectura ia64. El archivo del proyecto tendría el siguiente aspecto:

a.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Build">
        <MSBuild Projects="a1.sln..." Properties="Configuration=Release;
          Architecture=x86"/>
        <MSBuild Projects="a2.sln" Properties="Configuration=Release;
          Architecture=ia64"/>
    </Target>
</Project>

Con los metadatos AdditionalProperties, puede simplificarlo para usar una sola tarea de MSBuild mediante lo siguiente:

a.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <ProjectToBuild Include="a1.sln...">
            <AdditionalProperties>Architecture=x86
              </AdditionalProperties>
        </ProjectToBuild>
        <ProjectToBuild Include="a2.sln">
            <AdditionalProperties>Architecture=ia64
              </AdditionalProperties>
        </ProjectToBuild>
    </ItemGroup>
    <Target Name="Build">
        <MSBuild Projects="@(ProjectToBuild)"
          Properties="Configuration=Release"/>
    </Target>
</Project>

Ejemplo

En el ejemplo siguiente se usa la tarea MSBuild para compilar los proyectos especificados por la colección de elementos de ProjectReferences. Las salidas de destino resultantes se almacenan en la colección de elementos AssembliesBuiltByChildProjects.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <ProjectReferences Include="*.*proj" />
    </ItemGroup>

    <Target Name="BuildOtherProjects">
        <MSBuild
            Projects="@(ProjectReferences)"
            Targets="Build">
            <Output
                TaskParameter="TargetOutputs"
                ItemName="AssembliesBuiltByChildProjects" />
        </MSBuild>
    </Target>

</Project>

Consulte también