Información general sobre MSBuild

Actualización: noviembre 2007

Microsoft Build Engine (MSBuild) en la nueva plataforma de compilación de Microsoft y Visual Studio. MSBuild es completamente transparente en cuanto al modo en que procesa y compila el software, lo que permite a los desarrolladores organizar y generar productos en entornos de prueba de compilación en los que Visual Studio no está instalado. En este tema se proporciona una breve información general sobre:

  • Los elementos básicos de un archivo de proyecto de MSBuild.

  • Cómo se utiliza MSBuild para generar proyectos.

  • Las características avanzadas de MSBuild.

  • Cómo Visual Studio utiliza MSBuild para generar proyectos.

Archivo de proyecto

MSBuild presenta un nuevo formato de archivo de proyecto basado en código XML que es sencillo de comprender, fácil de ampliar y totalmente compatible con Microsoft. El formato de archivo de proyecto de MSBuild permite a los desarrolladores describir de forma exhaustiva los elementos que deben generarse y el modo en que debe hacerse con distintas plataformas y configuraciones. Además, el formato de archivo de proyecto permite a los desarrolladores crear reglas de generación reutilizables que se pueden factorizar en archivos independientes para que las generaciones se ejecuten sistemáticamente en los distintos proyectos del producto. En las secciones siguientes se describen algunos de los elementos básicos del formato de archivo de proyecto de MSBuild.

Elementos

Los elementos representan entradas en el sistema de generación y se agrupan en colecciones de elementos basadas en los nombres de colección definidos por el usuario. Estas colecciones de elementos se pueden utilizar como parámetros para tareas, las cuales utilizan elementos individuales incluidos en la colección para llevar a cabo los pasos del proceso de generación.

Los elementos se declaran en el archivo de proyecto creando un elemento con el nombre de la colección de elementos como elemento secundario de un elemento ItemGroup. Por ejemplo, el código siguiente crea una colección de elementos con nombre Compile que incluye dos archivos.

<ItemGroup>
    <Compile Include = "file1.cs"/>
    <Compile Include = "file2.cs"/>
</ItemGroup>

A lo largo del archivo de proyecto se hace referencia a las colecciones de elementos mediante la sintaxis @(ItemCollectionName). Por ejemplo, en el ejemplo anterior se hace referencia a la colección de elementos con @(Compile).

Los elementos se pueden declarar utilizando comodines y pueden contener metadatos adicionales para escenarios de generación más avanzados. Para obtener más información sobre elementos, vea Elementos de MSBuild.

Propiedades

Las propiedades representan pares clave/valor que se pueden utilizar para configurar generaciones. Los elementos y las propiedades difieren de la manera siguiente:

  • Los elementos se almacenan en colecciones, mientras que las propiedades contienen un valor escalar único.

  • Los elementos no se pueden quitar de las colecciones de elementos, mientras que se puede modificar el valor de las propiedades una vez definido.

  • Los elementos pueden contener metadatos y utilizar la notación %(ItemMetadata), mientras que las propiedades no pueden.

Las propiedades se declaran creando un elemento con el nombre de la propiedad como elemento secundario de un elemento PropertyGroup. Por ejemplo, el código siguiente crea una propiedad denominada BuildDir con un valor de Build.

<PropertyGroup>
    <BuildDir>Build</BuildDir>
</PropertyGroup>

A lo largo del archivo de proyecto se hace referencia a las propiedades con la sintaxis $(PropertyName). Por ejemplo, para hacer referencia a la propiedad en el ejemplo anterior, se utiliza $(BuildDir). Para obtener más información sobre propiedades, vea Propiedades de MSBuild.

Tareas

Las tareas son unidades reutilizables de código ejecutable que se utilizan en proyectos de MSBuild para realizar operaciones de compilación. Por ejemplo, una tarea podría compilar archivos de entrada o ejecutar una herramienta externa. Una vez creadas, las tareas las pueden compartir y reutilizar desarrolladores diferentes en distintos proyectos.

La lógica de ejecución de una tarea se escribe en código administrado y se asigna a MSBuild con el elemento UsingTask. Puede escribir una tarea creando un tipo administrado que implemente la interfaz ITask. Para obtener más información sobre cómo escribir tareas, vea Cómo: Escribir una tarea.

MSBuild se distribuye con un gran número de tareas comunes, como Copy, que copia archivos, MakeDir, que crea directorios, y Csc, que compila archivos de código fuente de Visual C#. Para obtener una lista completa de tareas disponibles e información de uso, vea Referencia de tareas de MSBuild.

Para ejecutar una tarea en un archivo de proyecto de MSBuild, se crea un elemento con el nombre de la tarea como elemento secundario de un elemento Target. Las tareas normalmente aceptan parámetros, que se pasan como atributos del elemento. Las propiedades y las colecciones de elementos de MSBuild también se pueden utilizar como parámetros. Por ejemplo, el código siguiente llama a la tarea MakeDir y le pasa el valor de la propiedad BuildDir declarado en el ejemplo anterior.

<Target Name="MakeBuildDirectory">
    <MakeDir
        Directories="$(BuildDir)" />
</Target>

Para obtener más información sobre tareas, vea Tareas de MSBuild.

Destinos

Los destinos agrupan tareas en un orden particular y exponen secciones del archivo de proyecto como puntos de entrada en el proceso de generación. Los destinos se agrupan a menudo en secciones lógicas para permitir la expansión y aumentar la legibilidad. Dividir los pasos de generación en muchos destinos permite llamar a una parte del proceso de generación desde otros destinos sin necesidad de copiar dicha sección de código en cada destino. Por ejemplo, si varios puntos de entrada en el proceso de generación necesitan que se generen referencias, se puede crear un destino que genere referencias y ejecute dicho destino desde cada punto de entrada necesario.

Los destinos se declaran en el archivo de proyecto con el elemento Target. Por ejemplo, en el ejemplo de código siguiente se crea un destino denominado Compile que, a continuación, llama a la tarea Csc con la colección de elementos declarada en el ejemplo anterior.

<Target Name="Compile">
    <Csc Sources="@(Compile)" />
</Target>

En escenarios más avanzados, los destinos pueden describir relaciones entre ellos y llevar a cabo análisis de dependencia, lo que permite omitir secciones completas en el proceso de generación si dicho destino está actualizado. Para obtener más información sobre destinos, vea Objetivos de MSBuild.

Generar con MSBuild

Para ejecutar MSBuild desde la línea de comandos, se pasa un archivo de proyecto a MSBuild.exe con las opciones de la línea de comandos adecuadas. Las opciones de la línea de comandos permiten establecer propiedades, ejecutar destinos específicos y especificar registradores. Por ejemplo, para generar el archivo MyProj.proj con la propiedad Configuration establecida en Debug, se usaría la sintaxis de línea de comandos siguiente:

MSBuild.exe MyProj.proj /property:Configuration=Debug

Para obtener más información sobre las opciones de la línea de comandos de MSBuild, vea Referencia de la línea de comandos de MSBuild.

Nota de seguridad:

Antes de generar un proyecto descargado, asegúrese de que su código es de confianza. Los archivos de proyecto de MSBuild tienen la capacidad de ejecutar tareas que pueden dañar el sistema.

Conceptos avanzados

MSBuild se puede utilizar para realizar operaciones más avanzadas durante las compilaciones, como son el registro de errores, las advertencias, los mensajes para la consola y otros registradores, la realización de análisis de dependencia en los destinos y el procesamiento por lotes de tareas y destinos en metadatos de elementos. Para obtener más información sobre estos conceptos avanzados, vea Conceptos avanzados de MSBuild.

Integración de Visual Studio

Visual Studio utiliza el formato de archivo de proyecto de MSBuild para almacenar información de compilación sobre proyectos administrados. El valor del proyecto agregado y modificado mediante Visual Studio se refleja en el archivo .*proj que se genera para cada proyecto. Visual Studio utiliza una instancia hospedada de MSBuild para generar proyectos administrados; es decir, un proyecto administrado se puede generar en Visual Studio y desde la línea de comandos (incluso sin tener Visual Studio instalado), con resultados idénticos. Para obtener más información acerca de cómo Visual Studio utiliza MSBuild, vea Conceptos avanzados de MSBuild.

Vea también

Conceptos

MSBuild

Objetivos de MSBuild

Tareas de MSBuild

Elementos de MSBuild

Propiedades de MSBuild

Procesamiento por lotes de MSBuild

Información general sobre registro en MSBuild

Transformaciones de MSBuild

Integración de Visual Studio (MSBuild)

Referencia de esquemas del archivo de proyecto MSBuild

Otros recursos

Referencia de MSBuild

Referencia de tareas de MSBuild