MSBuild

Microsoft Build Engine (MSBuild) es una plataforma para compilar aplicaciones. MSBuild proporciona un esquema XML para un archivo de proyecto que controla la forma en que la plataforma de compilación procesa y compila el software. Aunque MSBuild se integra en Visual Studio, no depende de él. Los desarrolladores pueden orquestar y compilar productos en entornos donde no está instalado Visual Studio.

En este tema se proporciona información general sobre MSBuild:

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

  • Cómo se usa MSBuild para compilar proyectos.

  • Las características avanzadas de MSBuild.

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

  • Para obtener un tutorial de introducción, vea Tutorial: Usar MSBuild.

Archivo de proyecto

MSBuild utiliza un formato de archivo del proyecto basado en XML que es sencillo y extensible. El formato de archivo del proyecto de MSBuild permite a los desarrolladores describir los elementos que se van a compilar, y también cómo se van a compilar en diferentes sistemas operativos y configuraciones. Además, el formato de archivo del proyecto permite a los desarrolladores crear reglas de compilación reutilizables que se pueden factorizar en archivos independientes para que las compilaciones se ejecuten de forma coherente en los distintos proyectos del producto.

En las secciones siguientes se describen algunos de los elementos básicos del formato de archivo del proyecto de MSBuild. Para obtener un tutorial acerca de cómo se crea un archivo del proyecto básico, vea Tutorial: Crear un archivo del proyecto de MSBuild desde el principio.

Propiedades

Las propiedades representan pares clave/valor que se pueden utilizar para configurar compilaciones. Las propiedades se declaran creando un elemento que tenga el nombre de la propiedad como elemento secundario de un elemento PropertyGroup. Por ejemplo, el código siguiente crea una propiedad denominada BuildDir cuyo valor es Build.

<PropertyGroup>

<BuildDir>Build</BuildDir>

</PropertyGroup>

Para hacer referencia a las propiedades en el archivo del proyecto, se usa la sintaxis %(nombreDePropiedad). Por ejemplo, para hacer referencia a la propiedad del ejemplo, se usaría $(BuildDir). Para obtener más información sobre propiedades, vea Propiedades de MSBuild.

Items

Los elementos son entradas del sistema de compilación y suelen representar archivos. Se agrupan en tipos de acuerdo con los nombres de elemento definidos por el usuario. Estos tipos de elemento se pueden utilizar como parámetros para tareas, que utilizan los elementos individuales para llevar a cabo los pasos del proceso de compilación.

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

<ItemGroup>

<Compile Include = "file1.cs"/>

<Compile Include = "file2.cs"/>

</ItemGroup>

Para hacer referencia a los tipos de elemento en el archivo del proyecto, se usa la sintaxis @(tipoDeElemento). Por ejemplo, para hacer referencia al tipo de elemento del ejemplo, se usaría @(Compile).

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

Tareas

Las tareas son unidades 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. Las tareas se pueden reutilizar y las pueden compartir 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 usando 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 Escribir tareas.

MSBuild incluye tareas comunes que se pueden modificar para satisfacer los requisitos propios; por ejemplo, Copy que copia archivos, MakeDir que crea directorios y Csc que compila archivos de código fuente de Visual C#. Para obtener una lista de las tareas disponibles junto con información de uso, vea Referencia de tareas de MSBuild.

Para ejecutar una tarea en un archivo del proyecto de MSBuild, se crea un elemento con el nombre de la tarea como elemento secundario de un elemento Target. Las tareas aceptan normalmente parámetros, que se pasan como atributos del elemento. Tanto las propiedades como los elementos de MSBuild 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 que se declaró en el ejemplo anterior.

<Target Name="MakeBuildDirectory">

<MakeDir Directories="$(BuildDir)" />

</Target>

Para obtener más información acerca de las 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 compilación. Los destinos suelen agruparse en secciones lógicas para aumentar la legibilidad y permitir la expansión. Dividir los pasos de compilación en destinos permite llamar a una parte del proceso de compilació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 compilación necesitan que se compilen referencias, se puede crear un destino que compile referencias y, a continuación, ejecutar dicho destino desde cada punto de entrada que sea necesario.

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

<Target Name="Compile">

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

</Target>

En escenarios más avanzados, los destinos se pueden usar para describir relaciones entre sí y llevar a cabo análisis de dependencia, de modo que se pueden omitir secciones completas del proceso de compilación si dicho destino está actualizado. Para obtener más información acerca de los destinos, vea Objetivos de MSBuild.

Elementos condicionales

Muchos elementos de MSBuild se definen de forma condicional, es decir, el atributo Condition aparece en el elemento. El contenido de los elementos condicionales se omite, a menos que la condición se evalúe como "true". Por ejemplo,

<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

significa "Si la propiedad Configuration no se ha definido todavía, defínala y dele el valor Debug".

Casi todos elementos de MSBuild pueden tener un atributo Condition. Para obtener más información, vea Condiciones de MSBuild.

Distinguir mayúsculas de minúsculas

El esquema XML de MSBuild sigue las reglas de XML. Los nombres de elementos y atributos distinguen mayúsculas de minúsculas. Sin embargo, los nombres de propiedades, elementos y metadatos no distinguen mayúsculas de minúsculas en el modelo de objetos de MSBuild. Considere el grupo de elementos siguiente.

<ItemGroup>

<Compile Include="one.cs" />

<comPile Include="two.cs" />

</ItemGroup>

Esto crea el tipo de elemento Compile o comPile o cualquier otra variación de grafía, y le da el valor "one.cs;two.cs".

Utilizar MSBuild en el símbolo del sistema

Para ejecutar MSBuild en el símbolo del sistema, se ha de pasar un archivo del proyecto a MSBuild.exe junto con las opciones de la línea de comandos adecuadas. Las opciones de la línea de comandos permiten establecer propiedades, ejecutar destinos concretos y establecer otras opciones que controlan el proceso de compilación. Por ejemplo, para compilar 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 acerca de las opciones de la línea de comandos de MSBuild, vea Referencia de la línea de comandos de MSBuild

Nota de seguridadNota sobre la seguridad

Antes de descargar un proyecto, asegúrese de que su código es de confianza.

Conceptos avanzados

MSBuild también se puede utilizar para realizar otras operaciones, por ejemplo el registro de errores, las advertencias, los mensajes para la consola u otros dispositivos de salida, 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.

Usar MSBuild en Visual Studio

Visual Studio utiliza el formato de archivo de proyecto de MSBuild para almacenar información de compilación sobre proyectos administrados. La configuración del proyecto que se agrega o modifica utilizando la interfaz de Visual Studio se refleja en el archivo .*proj que se genera para cada proyecto. Visual Studio utiliza una instancia hospedada de MSBuild para compilar proyectos administrados. Esto significa que un proyecto administrado se puede compilar en Visual Studio o en un símbolo del sistema (aunque Visual Studio no esté instalado) y los resultados serán idénticos.

Para obtener un tutorial sobre cómo utilizar MSBuild en Visual Studio, vea Tutorial: Usar MSBuild.

Compatibilidad con múltiples versiones (multi-targeting)

Con Visual Studio, puede compilar una aplicación para que se ejecute en cualquiera de las versiones de .NET Framework. Por ejemplo, puede compilar una aplicación para que se ejecute en .NET Framework versión 2.0 y compilarla para que también se ejecute en .NET Framework versión 4. La capacidad de compilar para más de una versión de Framework se denomina multitargeting.

Éstas son algunas de las ventajas de la compatibilidad con múltiples versiones (multitargeting):

  • Puede desarrollar aplicaciones que tienen como destino versiones anteriores de .NET Framework, por ejemplo, las versiones 2.0, 3.0 y 3.5.

  • Puede tener como destino marcos distintos de .NET Framework, por ejemplo, Silverlight.

  • Puede tener como destino un perfil de Framework, que es un subconjunto predefinido de una versión de .NET Framework de destino.

  • Si se publica algún service pack para .NET Framework versión 4, podría utilizarlo como destino.

  • El multitargeting garantiza que una aplicación utilice solo la funcionalidad que está disponible en la versión de .NET Framework de destino.

  • Para obtener más información, vea Compatibilidad con múltiples versiones de MSBuild.

Temas relacionados

Título

Descripción

Tutorial: Crear un archivo del proyecto de MSBuild desde el principio

Muestra la forma de crear un archivo básico del proyecto de forma incremental, utilizando solo un editor de texto.

Tutorial: Usar MSBuild

Presenta los bloques de compilación de MSBuild y muestra la forma de escribir, manipular y depurar proyectos de MSBuild sin cerrar el entorno de desarrollo integrado (IDE) de Visual Studio.

Conceptos de MSBuild

Presenta los cuatro bloques de compilación de MSBuild: propiedades, elementos, destinos y tareas.

Elementos de MSBuild

Describe los conceptos generales en que se basa el formato de archivo de MSBuild y la manera de encajar las piezas.

Propiedades de MSBuild

Presenta las propiedades y las colecciones de propiedades. Las propiedades son pares clave/valor que se pueden utilizar para configurar compilaciones.

Objetivos de MSBuild

Explica cómo agrupar las tareas entre sí en un orden concreto y habilitar las secciones del proceso de compilación para que se las pueda llamar desde la línea de comandos.

Tareas de MSBuild

Muestra la forma de crear una unidad de código ejecutable que MSBuild puede usar para realizar operaciones de compilación indivisibles.

Condiciones de MSBuild

Explica la forma de utilizar el atributo Condition en un elemento de MSBuild.

Conceptos avanzados de MSBuild

Presenta el procesamiento por lotes, la realización de transformaciones, la supervisión (registro), la compilación y otras técnicas avanzadas.

Otros recursos de MSBuild

Enumera los recursos de compatibilidad y comunidad para obtener más información sobre MSBuild.

Referencia