MSBuildMSBuild

Microsoft Build EngineMicrosoft Build Engine es una plataforma para compilar aplicaciones.The Microsoft Build EngineMicrosoft Build Engine is a platform for building applications. Este motor, que también se conoce como MSBuild, proporciona un esquema XML para un archivo del proyecto que controla cómo la plataforma de compilación procesa y compila el software.This engine, which is also known as MSBuild, provides an XML schema for a project file that controls how the build platform processes and builds software. Visual Studio utiliza MSBuild, pero no depende de Visual Studio.Visual Studio uses MSBuild, but it doesn't depend on Visual Studio. Al invocar msbuild.exe en el archivo de proyecto o solución, puede orquestar y compilar productos en entornos donde no está instalado Visual Studio.By invoking msbuild.exe on your project or solution file, you can orchestrate and build products in environments where Visual Studio isn't installed.

Visual Studio utiliza MSBuild para cargar y compilar proyectos administrados.Visual Studio uses MSBuild to load and build managed projects. Los archivos de proyecto de Visual Studio ( .csproj, .vbproj, .vcxproj, etc.) contienen código XML de MSBuild que se ejecuta cuando se compila un proyecto mediante el IDE.The project files in Visual Studio (.csproj, .vbproj, .vcxproj, and others) contain MSBuild XML code that executes when you build a project by using the IDE. Los proyectos de Visual Studio importan todos los valores y procesos de compilación necesarios para realizar el trabajo de desarrollo típico, pero se pueden extender o modificar dentro de Visual Studio o mediante un editor XML.Visual Studio projects import all the necessary settings and build processes to do typical development work, but you can extend or modify them from within Visual Studio or by using an XML editor.

Para obtener información sobre MSBuild para C++, consulte MSBuild (Visual C++).For information about MSBuild for C++, see MSBuild (Visual C++).

En los ejemplos siguientes se muestra cuándo pueden ejecutarse las compilaciones mediante una línea de comandos de MSBuild en lugar de usar el IDE de Visual Studio.The following examples illustrate when you might run builds by using an MSBuild command line instead of the Visual Studio IDE.

  • Visual Studio no está instalado.Visual Studio isn't installed. (Descargue MSBuild sin Visual Studio).(download MSBuild without Visual Studio)

  • Desea utilizar la versión de 64 bits de MSBuild.You want to use the 64-bit version of MSBuild. Esta versión de MSBuild normalmente es innecesaria, pero permite que MSBuild tenga acceso a más memoria.This version of MSBuild is usually unnecessary, but it allows MSBuild to access more memory.

  • Desea ejecutar una compilación en varios procesos.You want to run a build in multiple processes. Sin embargo, puede utilizar el IDE para lograr el mismo resultado en proyectos de C++ y C#.However, you can use the IDE to achieve the same result on projects in C++ and C#.

  • Desea modificar el sistema de compilación.You want to modify the build system. Por ejemplo, quizá desee habilitar las acciones siguientes:For example, you might want to enable the following actions:

    • Preprocesar los archivos antes de alcanzar el compilador.Preprocess files before they reach the compiler.

    • Copiar los resultados de compilación en un lugar diferente.Copy the build outputs to a different place.

    • Crear archivos comprimidos a partir de los resultados de la compilación.Create compressed files from build outputs.

    • Realizar un paso de procesamiento posterior.Do a post-processing step. Por ejemplo, puede ser conveniente crear una marca de tiempo en un ensamblado con una versión diferente.For example, you might want to stamp an assembly with a different version.

Puede escribir código en el IDE de Visual Studio, pero ejecutar las compilaciones con MSBuild.You can write code in the Visual Studio IDE but run builds by using MSBuild. Otra alternativa consiste en compilar el código en el IDE en un equipo de desarrollo, pero usar una línea de comandos de MSBuild para compilar el código que está integrado de varios desarrolladores.As another alternative, you can build code in the IDE on a development computer but use an MSBuild command line to build code that's integrated from multiple developers.

Note

Puede utilizar Team Foundation Build para compilar, probar e implementar automáticamente la aplicación.You can use Team Foundation Build to automatically compile, test, and deploy your application. El sistema de compilación puede ejecutar automáticamente las compilaciones cuando los desarrolladores protegen el código (por ejemplo, como parte de una estrategia de integración continua) o según una programación (por ejemplo, una prueba nocturna de comprobación de la compilación).Your build system can automatically run builds when developers check in code (for example, as part of a Continuous Integration strategy) or according to a schedule (for example, a nightly Build Verification Test build). Team Foundation Build compila el código con MSBuild.Team Foundation Build compiles your code by using MSBuild. Para obtener más información, consulte Azure Pipelines.For more information, see Azure Pipelines.

En este tema se proporciona información general sobre MSBuild.This topic provides an overview of MSBuild. Para obtener un tutorial de introducción, consulte Tutorial: Usar MSBuild.For an introductory tutorial, see Walkthrough: Using MSBuild.

Uso de MSBuild en un símbolo del sistemaUse MSBuild at a command prompt

Para ejecutar MSBuildMSBuild en un símbolo del sistema, pase un archivo del proyecto a MSBuild.exe junto con las opciones de la línea de comandos adecuadas.To run MSBuildMSBuild at a command prompt, pass a project file to MSBuild.exe, together with the appropriate command-line options. 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.Command-line options let you set properties, execute specific targets, and set other options that control the build process. Por ejemplo, para compilar el archivo MyProj.proj con la propiedad Configuration establecida en Debug, usaría la siguiente sintaxis de línea de comandos.For example, you would use the following command-line syntax to build the file MyProj.proj with the Configuration property set to Debug.

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

Para más información sobre las opciones de la línea de comandos de MSBuildMSBuild, consulte Referencia de la línea de comandos.For more information about MSBuildMSBuild command-line options, see Command-line reference.

Important

Antes de descargar un proyecto, asegúrese de que su código es de confianza.Before you download a project, determine the trustworthiness of the code.

Archivo del proyectoProject file

MSBuildMSBuild utiliza un formato de archivo del proyecto basado en XML que es sencillo y extensible.uses an XML-based project file format that's straightforward and extensible. El formato de archivo del proyecto de MSBuildMSBuild 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.The MSBuildMSBuild project file format lets developers describe the items that are to be built, and also how they are to be built for different operating systems and configurations. Además, el formato del archivo de 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.In addition, the project file format lets developers author reusable build rules that can be factored into separate files so that builds can be performed consistently across different projects in the product.

En las secciones siguientes se describen algunos de los elementos básicos del formato de archivo de proyecto de MSBuildMSBuild.The following sections describe some of the basic elements of the MSBuildMSBuild project file format. Para obtener un tutorial sobre cómo crear un archivo de proyecto básico, vea Tutorial: Crear un archivo de proyecto de MSBuild desde cero.For a tutorial about how to create a basic project file, see Walkthrough: Creating an MSBuild project file from scratch.

PropiedadesProperties

Las propiedades representan pares clave/valor que se pueden utilizar para configurar compilaciones.Properties represent key/value pairs that can be used to configure builds. Las propiedades se declaran mediante la creación de un elemento que tenga el nombre de la propiedad como elemento secundario de un elemento PropertyGroup.Properties are declared by creating an element that has the name of the property as a child of a PropertyGroup element. Por ejemplo, el código siguiente crea una propiedad denominada BuildDir cuyo valor es Build.For example, the following code creates a property named BuildDir that has a value of Build.

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

Puede definir una propiedad condicionalmente si coloca un atributo Condition en el elemento.You can define a property conditionally by placing a Condition attribute in the element. El contenido de los elementos condicionales se omite, a menos que la condición se evalúe como true.The contents of conditional elements are ignored unless the condition evaluates to true. En el ejemplo siguiente, se define el elemento Configuration si aún no se ha definido.In the following example, the Configuration element is defined if it hasn't yet been defined.

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

Para hacer referencia a las propiedades en el archivo de proyecto, se utiliza la sintaxis $(<PropertyName).Properties can be referenced throughout the project file by using the syntax $(<PropertyName>). Por ejemplo, se puede hacer referencia a las propiedades de los ejemplos anteriores mediante $(BuildDir) y $(Configuration).For example, you can reference the properties in the previous examples by using $(BuildDir) and $(Configuration).

Para más información sobre las propiedades, consulte Propiedades de MSBuild.For more information about properties, see MSBuild properties.

ElementosItems

Los elementos son entradas del sistema de compilación y suelen representar archivos.Items are inputs into the build system and typically represent files. Se agrupan en tipos de acuerdo con los nombres de elemento definidos por el usuario.Items are grouped into item types, based on user-defined item names. 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.These item types can be used as parameters for tasks, which use the individual items to perform the steps of the build process.

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.Items are declared in the project file by creating an element that has the name of the item type as a child of an ItemGroup element. Por ejemplo, el código siguiente crea un tipo de elemento denominado Compile que incluye dos archivos.For example, the following code creates an item type named Compile, which includes two files.

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

Para hacer referencia a los tipos de elemento en el archivo de proyecto, se utiliza la sintaxis @(<ItemType).Item types can be referenced throughout the project file by using the syntax @(<ItemType>). Por ejemplo, para hacer referencia al tipo de elemento del ejemplo, se usaría @(Compile).For example, the item type in the example would be referenced by using @(Compile).

En MSBuild, los nombres de elementos y atributos distinguen mayúsculas de minúsculas.In MSBuild, element and attribute names are case-sensitive. Sin embargo, los nombres de propiedad, elemento y metadatos no las distinguen.However, property, item, and metadata names are not. El ejemplo siguiente crea el tipo de elemento Compile, comPile o cualquier otra variación de grafía, y asigna al tipo de elemento el valor "one.cs;two.cs".The following example creates the item type Compile, comPile, or any other case variation, and gives the item type the value "one.cs;two.cs".

<ItemGroup>
  <Compile Include="one.cs" />
  <comPile Include="two.cs" />
</ItemGroup>

Los elementos se pueden declarar utilizando caracteres comodín y pueden contener metadatos adicionales para escenarios de compilación más avanzados.Items can be declared by using wildcard characters and may contain additional metadata for more advanced build scenarios. Para obtener más información sobre los elementos, consulte Elementos.For more information about items, see Items.

TareasTasks

Las tareas son unidades de código ejecutable que se utilizan en proyectos de MSBuildMSBuild para realizar operaciones de compilación.Tasks are units of executable code that MSBuildMSBuild projects use to perform build operations. Por ejemplo, una tarea podría compilar archivos de entrada o ejecutar una herramienta externa.For example, a task might compile input files or run an external tool. Las tareas se pueden reutilizar y las pueden compartir desarrolladores diferentes en distintos proyectos.Tasks can be reused, and they can be shared by different developers in different projects.

La lógica de ejecución de una tarea se escribe en código administrado y se asigna a MSBuildMSBuild mediante el elemento UsingTask.The execution logic of a task is written in managed code and mapped to MSBuildMSBuild by using the UsingTask element. Puede escribir una tarea creando un tipo administrado que implemente la interfaz ITask.You can write your own task by authoring a managed type that implements the ITask interface. Para más información sobre cómo escribir tareas, consulte Escribir tareas.For more information about how to write tasks, see Task writing.

MSBuildMSBuild incluye tareas comunes que puede modificar para que se ajusten a sus necesidades.includes common tasks that you can modify to suit your requirements. Algunos ejemplos son Copy, que copia archivos, MakeDir, que crea directorios, y Csc, que compila archivos de código fuente de Visual C#.Examples are Copy, which copies files, MakeDir, which creates directories, and Csc, which compiles Visual C# source code files. Para obtener una lista de las tareas disponibles junto con información de uso, consulte Referencia de tareas.For a list of available tasks together with usage information, see Task reference.

Para ejecutar una tarea en un archivo del proyecto de MSBuildMSBuild, se crea un elemento con el nombre de la tarea como elemento secundario de un elemento Target.A task is executed in an MSBuildMSBuild project file by creating an element that has the name of the task as a child of a Target element. Las tareas aceptan normalmente parámetros, que se pasan como atributos del elemento.Tasks typically accept parameters, which are passed as attributes of the element. Tanto las propiedades como los elementos de MSBuildMSBuild se pueden utilizar como parámetros.Both MSBuildMSBuild properties and items can be used as parameters. 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.For example, the following code calls the MakeDir task and passes it the value of the BuildDir property that was declared in the earlier example.

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

Para obtener más información sobre las tareas, consulte Tareas.For more information about tasks, see Tasks.

DestinosTargets

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.Targets group tasks together in a particular order and expose sections of the project file as entry points into the build process. Los destinos suelen agruparse en secciones lógicas para aumentar la legibilidad y permitir la expansión.Targets are often grouped into logical sections to increase readability and to allow for expansion. 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.Breaking the build steps into targets lets you call one piece of the build process from other targets without copying that section of code into every target. Por ejemplo, si varios puntos de entrada del 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.For example, if several entry points into the build process require references to be built, you can create a target that builds references and then run that target from every entry point where it's required.

Los destinos se declaran en el archivo del proyecto mediante el elemento Target.Targets are declared in the project file by using the Target element. 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.For example, the following code creates a target named Compile, which then calls the Csc task that has the item list that was declared in the earlier example.

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

En escenarios más avanzados, los destinos se pueden usar para describir relaciones mutuas y llevar a cabo análisis de dependencia, de modo que se pueden omitir secciones completas del proceso de compilación si un destino concreto está actualizado.In more advanced scenarios, targets can be used to describe relationships among one another and perform dependency analysis so that whole sections of the build process can be skipped if that target is up-to-date. Para obtener más información sobre los destinos, consulte Destinos.For more information about targets, see Targets.

Registros de compilaciónBuild logs

Puede registrar errores de compilación, advertencias y mensajes en la consola o en otro dispositivo de salida.You can log build errors, warnings, and messages to the console or another output device. Para más información, consulte Obtener registros de compilación y Registro de MSBuild.For more information, see Obtaining build logs and Logging in MSBuild.

Uso de MSBuild en Visual StudioUse MSBuild in Visual Studio

Programa para la mejoraVisual Studio utiliza el formato de archivo de proyecto de MSBuildMSBuild para almacenar información de compilación sobre proyectos administrados.uses the MSBuildMSBuild project file format to store build information about managed projects. La configuración del proyecto que se agrega o se modifica mediante la interfaz de Programa para la mejoraVisual Studio se refleja en el archivo .*proj que se genera para cada proyecto.Project settings that are added or changed by using the Programa para la mejoraVisual Studio interface are reflected in the .*proj file that's generated for every project. Programa para la mejoraVisual Studio utiliza una instancia hospedada de MSBuildMSBuild para compilar proyectos administrados.uses a hosted instance of MSBuildMSBuild to build managed projects. Esto significa que un proyecto administrado se puede compilar en Programa para la mejoraVisual Studio o en el símbolo del sistema (aunque Programa para la mejoraVisual Studio no esté instalado) y los resultados serán idénticos.This means that a managed project can be built in Programa para la mejoraVisual Studio or at a command prompt (even if Programa para la mejoraVisual Studio isn't installed), and the results will be identical.

Para obtener un tutorial sobre cómo utilizar MSBuild en Visual Studio, vea Tutorial: Usar MSBuild.For a tutorial about how to use MSBuild in Visual Studio, see Walkthrough: Using MSBuild.

Compatibilidad con múltiples versiones (multi-targeting)Multitargeting

Con Visual Studio, puede compilar una aplicación para que se ejecute en cualquiera de las versiones de .NET Framework.By using Visual Studio, you can compile an application to run on any one of several versions of the .NET Framework. Por ejemplo, puede compilar una aplicación para que se ejecute en .NET Framework 2.0 en una plataforma de 32 bits y compilar esa misma aplicación para que se ejecute en .NET Framework 4.5 en una plataforma de 64 bits.For example, you can compile an application to run on the .NET Framework 2.0 on a 32-bit platform, and you can compile the same application to run on the .NET Framework 4.5 on a 64-bit platform. La capacidad de compilar para más de una versión de Framework se denomina multitargeting.The ability to compile to more than one framework is named multitargeting.

Estas son algunas de las ventajas de la compatibilidad con múltiples versiones (multitargeting):These are some of the benefits of multitargeting:

  • Puede desarrollar aplicaciones que tienen como destino versiones anteriores de .NET Framework, por ejemplo, las versiones 2.0, 3.0 y 3.5.You can develop applications that target earlier versions of the .NET Framework, for example, versions 2.0, 3.0, and 3.5.

  • Puede usar como destino marcos distintos de .NET Framework, por ejemplo, Silverlight.You can target frameworks other than the .NET Framework, for example, Silverlight.

  • Puede tener como destino un perfil de Framework, que es un subconjunto predefinido de un marco de trabajo de destino.You can target a framework profile, which is a predefined subset of a target framework.

  • Si se publica algún Service Pack para la versión actual de .NET Framework, podría utilizarlo como destino.If a service pack for the current version of the .NET Framework is released, you could target it.

  • La compatibilidad con múltiples versiones (multitargeting) garantiza que una aplicación utilice solo la funcionalidad que está disponible en el marco y plataforma de destino.Multitargeting guarantees that an application uses only the functionality that's available in the target framework and platform.

Para obtener más información, consulte Compatibilidad con múltiples versiones (multi-targeting).For more information, see Multitargeting.

Vea tambiénSee also

TitleTitle DESCRIPCIÓNDescription
Tutorial: Crear un archivo de proyecto de MSBuild desde ceroWalkthrough: Creating an MSBuild project file from scratch Muestra la forma de crear un archivo básico del proyecto de forma incremental, utilizando solo un editor de texto.Shows how to create a basic project file incrementally, by using only a text editor.
Tutorial: Usar MSBuildWalkthrough: Using MSBuild Presenta los bloques de compilación de MSBuild y muestra la forma de escribir, manipular y depurar proyectos de MSBuild sin cerrar el IDE de Visual Studio.Introduces the building blocks of MSBuild and shows how to write, manipulate, and debug MSBuild projects without closing the Visual Studio IDE.
Conceptos de MSBuildMSBuild concepts Presenta los cuatro bloques de compilación de MSBuild: propiedades, elementos, destinos y tareas.Presents the four building blocks of MSBuild: properties, items, targets, and tasks.
ElementosItems Describe los conceptos generales en que se basa el formato de archivo de MSBuildMSBuild y la manera de encajar las piezas.Describes the general concepts behind the MSBuildMSBuild file format and how the pieces fit together.
Propiedades de MSBuildMSBuild properties Presenta las propiedades y las colecciones de propiedades.Introduces properties and property collections. Las propiedades son pares clave/valor que se pueden utilizar para configurar compilaciones.Properties are key/value pairs that can be used to configure builds.
DestinosTargets 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.Explains how to group tasks together in a particular order and enable sections of the build process to be called on the command line.
TareasTasks Muestra la forma de crear una unidad de código ejecutable que MSBuildMSBuild puede usar para realizar operaciones de compilación indivisibles.Shows how to create a unit of executable code that can be used by MSBuildMSBuild to perform atomic build operations.
CondicionesConditions Explica la forma de utilizar el atributo Condition en un elemento de MSBuild.Discusses how to use the Condition attribute in an MSBuild element.
Conceptos avanzadosAdvanced concepts Presenta el procesamiento por lotes, la realización de transformaciones, la compatibilidad con múltiples versiones (multitargeting) y otras técnicas avanzadas.Presents batching, performing transforms, multitargeting, and other advanced techniques.
Registro de MSBuildLogging in MSBuild Describe cómo registrar los eventos, mensajes y errores de compilación.Describes how to log build events, messages, and errors.
Recursos adicionalesAdditional resources Enumera los recursos de compatibilidad y comunidad para obtener más información sobre MSBuild.Lists community and support resources for more information about MSBuild.

ReferenciaReference