Referencia de la línea de comandos de MSBuildMSBuild command-line reference

Si usa MSBuild.exe para compilar un archivo de proyecto o solución, puede incluir varios modificadores para especificar distintos aspectos del proceso.When you use MSBuild.exe to build a project or solution file, you can include several switches to specify various aspects of the process.

Cada modificador está disponible en dos formatos: -modificador y /modificador.Every switch is available in two forms: -switch and /switch. En la documentación solo se muestra el formato -modificador.The documentation only shows the -switch form.

SintaxisSyntax

MSBuild.exe [Switches] [ProjectFile]  

ArgumentosArguments

ArgumentoArgument DescripciónDescription
ProjectFile Crea los destinos en el archivo de proyecto especificado.Builds the targets in the project file that you specify. Si no se especifica un archivo de proyecto, MSBuild busca en el directorio de trabajo actual una extensión de nombre de archivo que termine en proj y usa ese archivo.If you don't specify a project file, MSBuild searches the current working directory for a file name extension that ends in proj and uses that file. También puede especificar un archivo de solución de Visual Studio para este argumento.You can also specify a Visual Studio solution file for this argument.

ModificadoresSwitches

ModificadorSwitch Forma abreviadaShort form DescripciónDescription
-help-help /?/? o -hor -h Muestra información de uso.Display usage information. El comando siguiente muestra un ejemplo:The following command is an example:

msbuild.exe -?
-detailedsummary-detailedsummary -ds-ds Muestra información detallada al final del registro de compilación sobre las configuraciones que se compilaron y cómo se programaron en los nodos.Show detailed information at the end of the build log about the configurations that were built and how they were scheduled to nodes.
-ignoreprojectextensions: extensions-ignoreprojectextensions: extensions -ignore: extensions-ignore: extensions Omite las extensiones especificadas al determinar qué archivo de proyecto se va a compilar.Ignore the specified extensions when determining which project file to build. Use un punto y coma o una coma para separar varias extensiones, como se muestra en el ejemplo siguiente:Use a semicolon or a comma to separate multiple extensions, as the following example shows:

-ignoreprojectextensions:.vcproj,.sln
-maxcpucount[:number]-maxcpucount[:number] -m[:number]-m[:number] Especifica el número máximo de procesos simultáneos que se pueden usar al compilar.Specifies the maximum number of concurrent processes to use when building. Si no incluye este modificador, el valor predeterminado es 1.If you don't include this switch, the default value is 1. Si incluye este modificador sin especificar un valor, MSBuild podrá usar todos los procesadores de que disponga el equipo.If you include this switch without specifying a value, MSBuild will use up to the number of processors in the computer. Para obtener más información, vea Compilar varios proyectos en paralelo.For more information, see Building multiple projects in parallel.

En el ejemplo siguiente se indica a MSBuild que efectúe la compilación usando tres procesos de MSBuild, lo que permite compilar tres proyectos al mismo tiempo:The following example instructs MSBuild to build using three MSBuild processes, which allows three projects to build at the same time:

msbuild myproject.proj -maxcpucount:3
-noautoresponse-noautoresponse -noautorsp-noautorsp No incluye automáticamente ningún archivo MSBuild.rsp.Don't include any MSBuild.rsp files automatically.
-nodeReuse:value-nodeReuse:value -nr:value-nr:value Habilita o deshabilita la reutilización de los nodos de MSBuild.Enable or disable the re-use of MSBuild nodes. Puede especificar los siguientes valores:You can specify the following values:

- True.- True. Los nodos permanecen al finalizar la compilación de modo que las compilaciones subsiguientes puedan usarlos (valor predeterminado).Nodes remain after the build finishes so that subsequent builds can use them (default).
- False.- False. Los nodos no se conservan después finalizar la compilación.Nodes don't remain after the build completes.

Un nodo corresponde a un proyecto que se está ejecutando.A node corresponds to a project that's executing. Si incluye el modificador -maxcpucount, se podrán ejecutar varios nodos simultáneamente.If you include the -maxcpucount switch, multiple nodes can execute concurrently.
-nologo-nologo No muestra la pancarta de inicio ni el mensaje de copyright.Don't display the startup banner or the copyright message.
-preprocess[:filepath]-preprocess[:filepath] -pp[:filepath]-pp[:filepath] Crea un solo archivo de proyecto agregado alineando todos los archivos que se importarían durante una compilación, con sus límites marcados.Create a single, aggregated project file by inlining all the files that would be imported during a build, with their boundaries marked. Puede usar este modificador para determinar con mayor facilidad qué archivos se van a importar, desde dónde y cuáles contribuirán a la compilación.You can use this switch to more easily determine which files are being imported, from where the files are being imported, and which files contribute to the build. Si se usa este modificador, el proyecto no se compila.When you use this switch, the project isn't built.

Si especifica el parámetro filepath, el archivo de proyecto agregado se genera en el archivo.If you specify a filepath, the aggregated project file is output to the file. En caso contrario, los resultados aparecen en la ventana de la consola.Otherwise, the output appears in the console window.

Para obtener información sobre cómo usar el elemento Import para insertar un archivo de proyecto en otro, vea Elemento Import (MSBuild) y Cómo: Usar el mismo destino en varios archivos de proyecto.For information about how to use the Import element to insert a project file into another project file, see Import element (MSBuild) and How to: Use the same target in multiple project files.
-property:name=value-property:name=value /p:name=value/p:name=value Establece o invalida las propiedades en el nivel de proyecto especificadas, donde name es el nombre de la propiedad y value es el valor de propiedad.Set or override the specified project-level properties, where name is the property name and value is the property value. Especifique cada propiedad por separado, o use un punto y coma o una coma para separar varias propiedades, como se muestra en el ejemplo siguiente:Specify each property separately, or use a semicolon or comma to separate multiple properties, as the following example shows:

-property:WarningLevel=2;OutDir=bin\Debug
-restore-restore -r-r Ejecuta el destino Restore antes de compilar los destinos reales.Runs the Restore target prior to building the actual targets.
-target:targets-target:targets -t:targets-t:targets Compila los destinos especificados en el proyecto.Build the specified targets in the project. Especifique cada destino por separado, o use un punto y coma o una coma para separar varios destinos, como se muestra en el ejemplo siguiente:Specify each target separately, or use a semicolon or comma to separate multiple targets, as the following example shows:

-target:Resources;Compile

Si especifica destinos usando este modificador, estos se ejecutarán en lugar de los especificados en el atributo DefaultTargets del archivo de proyecto.If you specify any targets by using this switch, they are run instead of any targets in the DefaultTargets attribute in the project file. Para obtener más información, vea Orden de compilación de destinos y Cómo: Especificar qué destino usar primero al compilar.For more information, see Target build order and How to: Specify which target to build first.

Un destino es un grupo de tareas.A target is a group of tasks. Para obtener más información, consulte Destinos.For more information, see Targets.
-toolsversion:version-toolsversion:version -tv:version-tv:version Especifica la versión del conjunto de herramientas que se va a usar para compilar el proyecto, como se muestra en el ejemplo siguiente: -toolsversion:3.5Specifies the version of the Toolset to use to build the project, as the following example shows: -toolsversion:3.5

Con este modificador, puede compilar un proyecto y especificar una versión diferente de la especificada en el Elemento Project (MSBuild).By using this switch, you can build a project and specify a version that differs from the version that's specified in the Project element (MSBuild). Para obtener más información, vea Invalidar el valor de la versión de herramientas.For more information, see Overriding ToolsVersion settings.

En MSBuild 4.5, puede especificar los valores siguientes para version: 2.0, 3.5 y 4.0.For MSBuild 4.5, you can specify the following values for version: 2.0, 3.5, and 4.0. Si especifica 4.0, la propiedad de compilación VisualStudioVersion especifica el subconjunto de herramientas que se va a usar.If you specify 4.0, the VisualStudioVersion build property specifies which sub-toolset to use. Para obtener más información, vea la sección de subconjuntos de herramientas de Conjunto de herramientas (ToolsVersion).For more information, see the Sub-toolsets section of Toolset (ToolsVersion).

Un conjunto de herramientas consta de tareas, destinos y herramientas que se utilizan para compilar una aplicación.A Toolset consists of tasks, targets, and tools that are used to build an application. Las herramientas incluyen compiladores como csc.exe y vbc.exe.The tools include compilers such as csc.exe and vbc.exe. Para obtener más información sobre los conjuntos de herramientas, vea Conjunto de herramientas de MSBuild (ToolsVersion), Configuraciones de conjuntos de herramientas estándar y personalizados y Compatibilidad con múltiples versiones (multi-targeting).For more information about Toolsets, see Toolset (ToolsVersion), Standard and custom toolset configurations, and Multitargeting. Nota: La versión del conjunto de herramientas no es la misma que el marco de destino, que es la versión de .NET Framework para la que se compila un proyecto.Note: The toolset version isn't the same as the target framework, which is the version of the .NET Framework on which a project is built to run. Para obtener más información, vea Versión de .NET Framework de destino y plataforma de destino.For more information, see Target framework and target platform.
-validate:[schema]-validate:[schema] -val[schema]-val[schema] Valida el archivo de proyecto y, si la validación es correcta, lo compila.Validate the project file and, if validation succeeds, build the project.

Si no especifica schema, el proyecto se valida con el esquema predeterminado.If you don't specify schema, the project is validated against the default schema.

Si especifica schema, el proyecto se valida con el esquema especificado.If you specify schema, the project is validated against the schema that you specify.

El valor siguiente muestra un ejemplo: -validate:MyExtendedBuildSchema.xsdThe following setting is an example: -validate:MyExtendedBuildSchema.xsd
-verbosity:level-verbosity:level -v:level-v:level Especifica la cantidad de información que se va a mostrar en el registro de compilación.Specifies the amount of information to display in the build log. Cada registrador muestra eventos en función del nivel de detalle establecido para él.Each logger displays events based on the verbosity level that you set for that logger.

Puede especificar los niveles de detalles siguientes: q[uiet], m[inimal], n[ormal], d[etailed] y diag[nostic].You can specify the following verbosity levels: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic].

El valor siguiente muestra un ejemplo: -verbosity:quietThe following setting is an example: -verbosity:quiet
-version-version -ver-ver Muestra solo la información de versión.Display version information only. El proyecto no se compila.The project isn't built.
@file Inserta los modificadores de línea de comando de un archivo de texto.Insert command-line switches from a text file. Si tiene varios archivos, deberá especificarlos por separado.If you have multiple files, you specify them separately. Para obtener más información, vea Archivos de respuesta.For more information, see Response files.

Modificadores para registradoresSwitches for loggers

ModificadorSwitch Forma abreviadaShort form DescripciónDescription
-consoleloggerparameters:-consoleloggerparameters:

parameters
-clp:parameters-clp:parameters Pasa los parámetros especificados al registrador de la consola, lo que muestra información de compilación en la ventana de la consola.Pass the parameters that you specify to the console logger, which displays build information in the console window. Puede especificar los parámetros siguientes:You can specify the following parameters:

- PerformanceSummary.- PerformanceSummary. Muestra el tiempo empleado en tareas, destinos y proyectos.Show the time that's spent in tasks, targets, and projects.
- Summary.- Summary. Muestra un resumen de errores y advertencias al final.Show the error and warning summary at the end.
- NoSummary.- NoSummary. No muestra un resumen de errores y advertencias al final.Don't show the error and warning summary at the end.
- ErrorsOnly.- ErrorsOnly. Muestra solo errores.Show only errors.
- WarningsOnly.- WarningsOnly. Muestra solo advertencias.Show only warnings.
- NoItemAndPropertyList.- NoItemAndPropertyList. No muestra la lista de elementos y propiedades que aparecerían al principio de cada compilación del proyecto si se estableciera el nivel de detalle en diagnostic.Don't show the list of items and properties that would appear at the start of each project build if the verbosity level is set to diagnostic.
- ShowCommandLine.- ShowCommandLine. Muestra los mensajes de TaskCommandLineEvent.Show TaskCommandLineEvent messages.
- ShowTimestamp.- ShowTimestamp. Muestra la marca de tiempo como un prefijo en los mensajes.Show the timestamp as a prefix to any message.
- ShowEventId.- ShowEventId. Muestra el identificador de evento para los eventos iniciados, los eventos finalizados y los mensajes.Show the event ID for each started event, finished event, and message.
- ForceNoAlign.- ForceNoAlign. No alinea el texto al tamaño del búfer de la consola.Don't align the text to the size of the console buffer.
- DisableConsoleColor.- DisableConsoleColor. Usa los colores de consola predeterminados para todos los mensajes de registro.Use the default console colors for all logging messages.
- DisableMPLogging.- DisableMPLogging. Deshabilita el estilo de registro de resultados de multiprocesador al ejecutarse en el modo de no multiprocesador.Disable the multiprocessor logging style of output when running in non-multiprocessor mode.
- EnableMPLogging.- EnableMPLogging. Habilita el estilo de registro de multiprocesador aunque se ejecute en el modo de no multiprocesador.Enable the multiprocessor logging style even when running in non-multiprocessor mode. Este estilo de registro está habilitado de forma predeterminada.This logging style is on by default.
- Verbosity.- Verbosity. Invalida el valor -verbosity para este registrador.Override the -verbosity setting for this logger.

Use un punto y coma o una coma para separar varios parámetros, como se muestra en el ejemplo siguiente:Use a semicolon or comma to separate multiple parameters, as the following example shows:

-consoleloggerparameters:PerformanceSummary;NoSummary -verbosity:minimal
-distributedFileLogger-distributedFileLogger -dfl-dfl Registra los resultados de la compilación de cada nodo de MSBuild en su propio archivo.Log the build output of each MSBuild node to its own file. La ubicación inicial de estos archivos es el directorio actual.The initial location for these files is the current directory. De forma predeterminada, los archivos se denominan MSBuild<NodeId>.log.By default, the files are named MSBuild<NodeId>.log. Puede usar el modificador -fileLoggerParameters para especificar la ubicación de estos archivos y otros parámetros de fileLogger.You can use the -fileLoggerParameters switch to specify the location of the files and other parameters for the fileLogger.

Si asigna un nombre a un archivo de registro mediante el modificador -fileLoggerParameters, el registrador distribuido usará ese nombre como plantilla y anexará el identificador del nodo a dicho nombre al crear un archivo de registro para cada nodo.If you name a log file by using the -fileLoggerParameters switch, the distributed logger will use that name as a template and append the node ID to that name when creating a log file for each node.
-distributedlogger:-distributedlogger:

central logger*

forwarding logger
-dl:central logger*forwarding logger-dl:central logger*forwarding logger Registra eventos de MSBuild, adjuntando una instancia del registrador diferente a cada nodo.Log events from MSBuild, attaching a different logger instance to each node. Para especificar varios registradores, hágalo por separado.To specify multiple loggers, specify each logger separately.

Use la sintaxis de registrador para especificar un registrador.You use the logger syntax to specify a logger. Para la sintaxis de registrador, vea el modificador -logger a continuación.For the logger syntax, see the -logger switch below.

En los ejemplos siguientes se muestra cómo utilizar este modificador:The following examples show how to use this switch:

-dl:XMLLogger,MyLogger,Version=1.0.2,Culture=neutral

-dl:MyLogger,C:\My.dll*ForwardingLogger,C:\Logger.dll
-fileLogger-fileLogger

[number][number]
-fl[number]-fl[number] Registra el resultado de la compilación en un archivo único en el directorio actual.Log the build output to a single file in the current directory. Si no especifica number, el archivo de salida se denomina msbuild.log.If you don't specify number, the output file is named msbuild.log. Si especifica number, el archivo de salida se denomina msbuild<n>.log, donde <n> es number.If you specify number, the output file is named msbuild<n>.log, where <n> is number. Number puede ser un dígito comprendido entre 1 y 9.Number can be a digit from 1 to 9.

Puede usar el modificador -fileLoggerParameters para especificar la ubicación del archivo y otros parámetros de fileLogger.You can use the -fileLoggerParameters switch to specify the location of the file and other parameters for the fileLogger.
-fileloggerparameters:[número]-fileloggerparameters:[number]

parameters
-flp:[ number] parameters-flp:[ number] parameters Especifica parámetros adicionales del registrador de archivos y del registrador de archivos distribuido.Specifies any extra parameters for the file logger and the distributed file logger. La presencia de este modificador implica también la presencia del modificador /filelogger[number] correspondiente.The presence of this switch implies that the corresponding /filelogger[number] switch is present. Number puede ser un dígito comprendido entre 1 y 9.Number can be a digit from 1 to 9.

Puede usar todos los parámetros que se enumeran para -consoleloggerparameters.You can use all parameters that are listed for -consoleloggerparameters. También puede utilizar uno o varios de los parámetros siguientes:You can also use one or more of the following parameters:

- LogFile.- LogFile. La ruta de acceso del archivo de registro donde se escribe el registro de compilación.The path to the log file into which the build log is written. El registrador de archivos distribuido usa esta ruta de acceso como prefijo en los nombres de los archivos de registro.The distributed file logger prefixes this path to the names of its log files.
- Append.- Append. Determina si el registro de compilación se anexará al archivo de registro o lo sobrescribirá.Determines whether the build log is appended to the log file or overwrites it. Cuando se establece el modificador, el registro de compilación se anexa al archivo de registro.When you set the switch, the build log is appended to the log file. Si el modificador no está presente, se sobrescribe el contenido de un archivo de registro existente.When the switch is not present, the contents of an existing log file are overwritten.
Si incluye el modificador append, el registro se anexará, independientemente de si está establecido en true o en false.If you include the append switch, no matter whether it is set to true or false, the log is appended. Si no incluye el modificador append, el registro se sobrescribe.If you do not include the append switch, the log is overwritten.
En este caso el archivo se sobrescribe: msbuild myfile.proj -l:FileLogger,Microsoft.Build;logfile=MyLog.logIn this case the file is overwritten: msbuild myfile.proj -l:FileLogger,Microsoft.Build;logfile=MyLog.log
En este caso el archivo se anexa: msbuild myfile.proj -l:FileLogger,Microsoft.Build;logfile=MyLog.log;append=trueIn this case the file is appended: msbuild myfile.proj -l:FileLogger,Microsoft.Build;logfile=MyLog.log;append=true
En este caso el archivo se anexa: msbuild myfile.proj -l:FileLogger,Microsoft.Build;logfile=MyLog.log;append=falseIn this case the file is appended: msbuild myfile.proj -l:FileLogger,Microsoft.Build;logfile=MyLog.log;append=false
- Encoding.- Encoding. Especifica la codificación del archivo (por ejemplo, UTF-8, Unicode o ASCII).Specifies the encoding for the file (for example, UTF-8, Unicode, or ASCII).

El ejemplo siguiente genera archivos de registro independientes para advertencias y errores:The following example generates separate log files for warnings and errors:

-flp1:logfile=errors.txt;errorsonly -flp2:logfile=warnings.txt;warningsonly

En los ejemplos siguientes se muestran otras posibilidades:The following examples show other possibilities:

-fileLoggerParameters:LogFile=MyLog.log;Append; Verbosity=diagnostic;Encoding=UTF-8

-flp:Summary;Verbosity=minimal;LogFile=msbuild.sum

-flp1:warningsonly;logfile=msbuild.wrn

-flp2:errorsonly;logfile=msbuild.err
-binaryLogger[:[LogFile=]output.binlog[;ProjectImports=[None,Embed,ZipFile]]]-binaryLogger[:[LogFile=]output.binlog[;ProjectImports=[None,Embed,ZipFile]]] -bl-bl Serializa todos los eventos de compilación en un archivo binario comprimido.Serializes all build events to a compressed binary file. De manera predeterminada, el archivo está en el directorio actual y se denomina msbuild.binlog.By default the file is in the current directory and named msbuild.binlog. El registro binario es una descripción detallada del proceso de compilación que puede usarse más tarde para reconstruir registros de texto y usarse con otras herramientas de análisis.The binary log is a detailed description of the build process that can later be used to reconstruct text logs and used by other analysis tools. Normalmente un registro binario es de 10 a 20 veces más pequeño que el registro de nivel de diagnóstico de texto más detallado, pero contiene más información.A binary log is usually 10-20x smaller than the most detailed text diagnostic-level log, but it contains more information.

El registrador binario recopila de manera predeterminada el texto de origen de los archivos de proyecto, incluidos todos los proyectos importados y los archivos de destino que se han encontrado durante la compilación.The binary logger by default collects the source text of project files, including all imported projects and target files encountered during the build. El modificador ProjectImports opcional controla este comportamiento:The optional ProjectImports switch controls this behavior:

- ProjectImports=None.- ProjectImports=None. No recopila las importaciones de proyecto.Don't collect the project imports.
- ProjectImports=Embed.- ProjectImports=Embed. Inserta las importaciones del proyecto en el archivo de registro de forma predeterminada.Embed project imports in the log file (default).
- ProjectImports=ZipFile.- ProjectImports=ZipFile. Guarda los archivos de proyecto en <output>.projectimports.zip, donde <output> es el mismo nombre que el del archivo de registro binario.Save project files to <output>.projectimports.zip where <output> is the same name as the binary log file name.

La configuración predeterminada para ProjectImports es "Embed".The default setting for ProjectImports is Embed.
Nota: El registrador no recopila ningún archivo de origen que no sea de MSBuild, como .cs, .cpp, etc.Note: the logger does not collect non-MSBuild source files such as .cs, .cpp etc.
Un archivo .binlog puede "reproducirse" si se pasa a msbuild.exe como argumento en lugar de como proyecto o solución.A .binlog file can be "played back" by passing it to msbuild.exe as an argument instead of a project/solution. Otros registradores recibirán la información que se incluye en el archivo de registro como si se estuviera realizando la compilación original.Other loggers will receive the information contained in the log file as if the original build was happening. Puede leer más acerca del registro binario y sus usos en: https://github.com/Microsoft/msbuild/wiki/Binary-LogYou can read more about the binary log and its usages at: https://github.com/Microsoft/msbuild/wiki/Binary-Log

Ejemplos:Examples:
- -bl
- -bl:output.binlog
- -bl:output.binlog;ProjectImports=None
- -bl:output.binlog;ProjectImports=ZipFile
- -bl:..\..\custom.binlog
- -binaryLogger
-logger:-logger:

logger
-l:logger-l:logger Especifica el registrador que se debe utilizar para registrar los eventos de MSBuild.Specifies the logger to use to log events from MSBuild. Para especificar varios registradores, hágalo por separado.To specify multiple loggers, specify each logger separately.

Utilice la sintaxis siguiente para logger: [``LoggerClass``,]``LoggerAssembly``[;``LoggerParameters``]Use the following syntax for logger: [``LoggerClass``,]``LoggerAssembly``[;``LoggerParameters``]

Utilice la sintaxis siguiente para LoggerClass: [``PartialOrFullNamespace``.]``LoggerClassNameUse the following syntax for LoggerClass: [``PartialOrFullNamespace``.]``LoggerClassName

No necesita especificar la clase de registrador si el ensamblado contiene exactamente un registrador.You don't have to specify the logger class if the assembly contains exactly one logger.

Utilice la sintaxis siguiente para LoggerAssembly: {``AssemblyName``[,``StrongName``] &#124; AssemblyFile``}Use the following syntax for LoggerAssembly: {``AssemblyName``[,``StrongName``] &#124; AssemblyFile``}

Los parámetros del registrador son opcionales y se pasan al registrador tal como se han escrito.Logger parameters are optional and are passed to the logger exactly as you enter them.

En los ejemplos siguientes se usa el modificador -logger.The following examples use the -logger switch.

-logger:XMLLogger,MyLogger,Version=1.0.2,Culture=neutral

-logger:XMLLogger,C:\Loggers\MyLogger.dll;OutputAsHTML
-noconsolelogger-noconsolelogger /noconlog/noconlog Deshabilita el registrador de la consola predeterminado y no registra eventos en la consola.Disable the default console logger, and don't log events to the console.

EjemploExample

En el siguiente ejemplo se compila el destino rebuild del proyecto MyProject.proj.The following example builds the rebuild target of the MyProject.proj project.

MSBuild.exe MyProject.proj -t:rebuild  

EjemploExample

Puede usar MSBuild.exe para realizar compilaciones más complejas.You can use MSBuild.exe to perform more complex builds. Por ejemplo, puede utilizarlo para compilar determinados destinos de proyectos específicos de una solución.For example, you can use it to build specific targets of specific projects in a solution. En el ejemplo siguiente se recompila el proyecto NotInSolutionFolder y se limpia el proyecto InSolutionFolder, que está en la carpeta de soluciones NewFolder.The following example rebuilds the project NotInSolutionFolder and cleans the project InSolutionFolder, which is in the NewFolder solution folder.

msbuild SlnFolders.sln -t:NotInSolutionfolder:Rebuild;NewFolder\InSolutionFolder:Clean  

Vea tambiénSee also

Referencia de MSBuild MSBuild reference
Propiedades comunes de proyectos de MSBuildCommon MSBuild project properties