Compartir a través de


Propiedades de MSBuild

Las propiedades son pares nombre-valor que se pueden utilizar para configurar compilaciones.Las propiedades son útiles para pasar valores a tareas, evaluar condiciones y almacenar valores a los que se hará referencia en el archivo del proyecto.

Definir y hacer referencia a propiedades en un archivo de proyecto

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 XML siguiente crea una propiedad denominada BuildDir cuyo valor es Build.

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

En el archivo del proyecto, se hace referencia a las propiedades mediante la sintaxis $(PropertyName).En el ejemplo anterior, se usa $(BuildDir) para hacer referencia a la propiedad.

Los valores de propiedad se pueden cambiar si se vuelve a definir la propiedad.Se puede asignar un nuevo valor a la propiedad BuildDir mediante este código XML:

<PropertyGroup>
    <BuildDir>Alternate</BuildDir>
</PropertyGroup>

Las propiedades se evalúan en el orden en que aparecen en el archivo del proyecto.El nuevo valor de BuildDir debe declararse después de que se haya asignado el valor anterior.

Propiedades reservadas

MSBuild reserva algunos nombres de propiedad para almacenar información sobre el archivo del proyecto y los binarios de MSBuild.Como a cualquier otra propiedad, a estas propiedades se hace referencia mediante la notación $.Por ejemplo, $(MSBuildProjectFile) devuelve el nombre de archivo completo del proyecto, incluida la extensión.

Para obtener más información, vea Cómo: Hacer referencia al nombre o ubicación del archivo de proyecto y Propiedades reservadas de MSBuild.

Propiedades de entorno

En los archivos de proyecto, se puede hacer referencia a las variables de entorno de la misma manera que en el caso de las propiedades reservadas.Por ejemplo, para utilizar la variable de entorno PATH en el archivo de proyecto, utilice $(Path).Si el proyecto incluye la definición de una propiedad que tiene el mismo nombre que una propiedad de entorno, la propiedad del proyecto reemplaza el valor de la propiedad de entorno.

Cada proyecto de MSBuild tiene aislado un entorno blocked: consulta sólo lee y escribe su propio bloque.MSBuild solo lee variables de entorno cuando se inicializa la colección de propiedades, antes de que se evalúe o compilado el archivo de proyecto.Después, las propiedades del entorno son estáticas, es decir, inicio todos los resultados de cada herramienta con los mismos nombres y valores.

Para obtener el valor actual de variables de entorno dentro de una herramienta todos los resultados, utilice Funciones de propiedad System.Environment.GetEnvironmentVariable.El método preferido, sin embargo, es utilizar el parámetro EnvironmentVariablesde la tarea.Las propiedades del entorno establecidas en esta matriz de cadenas se pueden pasar a la herramienta todos los generada sin afectar a las variables de entorno del sistema.

SugerenciaSugerencia

No todas las variables de entorno se leen en para convertirse en propiedades iniciales.Se omite cualquier variable de entorno cuyo nombre no sea los nombres de propiedad válidos de MSBuild, como “386 ".

Para obtener más información, vea Cómo: Utilizar variables de entorno al compilar.

Propiedades del Registro

Para leer los valores del Registro del sistema, use la sintaxis que figura a continuación, donde Hive es el subárbol del Registro (por ejemplo, HKEY_LOCAL_MACHINE ), Key es el nombre de la clave, SubKey es el nombre de la subclave, y Value es el valor de la subclave.

$(registry:Hive\MyKey\MySubKey@Value)

Para obtener el valor predeterminado de la subclave, omita Value.

$(registry:Hive\MyKey\MySubKey)

Este valor del Registro puede usarse para inicializar una propiedad de compilación.Por ejemplo, para crear una propiedad de compilación que represente la página principal del explorador web de Visual Studio, use este código:

<PropertyGroup>
  <VisualStudioWebBrowserHomePage>
    $(registry:HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\WebBrowser@HomePage)
  </VisualStudioWebBrowserHomePage>
<PropertyGroup>

Propiedades globales

MSBuild permite establecer propiedades en la línea de comandos mediante el modificador /property (o /p).Los valores de estas propiedades globales reemplazan los valores de propiedad establecidos en el archivo del proyecto.Esto incluye las propiedades de entorno pero no las propiedades reservadas ya que estas no se pueden cambiar.

En el siguiente ejemplo, se establece la propiedad global Configuration en DEBUG.

msbuild.exe MyProj.proj /p:Configuration=DEBUG

Las propiedades globales también se pueden establecer o modificar para proyectos secundarios en una compilación de varios proyectos mediante el atributo Properties de la tarea de MSBuild.Para obtener más información, vea MSBuild (Tarea).

Si especifica una propiedad mediante el atributo TreatAsLocalProperty en una etiqueta project, ese valor de propiedad global no reemplaza el valor de propiedad que se establece en el archivo de proyecto.Para obtener más información, vea Elemento Project (MSBuild) y Cómo: Compilar los mismos archivos de código fuente con diferentes opciones.

Funciones de propiedad

En la versión 4 de .NET Framework, se pueden usar funciones de propiedad para evaluar los scripts de MSBuild.Se puede leer la hora del sistema, comparar cadenas, buscar coincidencias de expresiones regulares y realizar muchas otras acciones en el script de compilación sin usar tareas de MSBuild.

Se pueden usar métodos de tipo string (instancia) con cualquier valor de propiedad y se puede llamar a los métodos estáticos de muchas clases del sistema.Por ejemplo, se puede establecer una propiedad de compilación en la fecha de hoy de la manera siguiente:

<Today>$([System.DateTime]::Now.ToString("yyyy.MM.dd"))</Today>

Para obtener más información y una lista de las funciones de propiedad, vea Funciones de propiedad.

Crear propiedades durante la ejecución

A las propiedades ubicadas fuera de los elementos Target se les asignan valores durante la fase de evaluación de una compilación.En la siguiente fase de la ejecución, se pueden crear o modificar propiedades como se indica a continuación:

  • Cualquier tarea puede emitir una propiedad.Para emitir una propiedad, el elemento Task debe tener un elemento Output secundario que tenga un atributo PropertyName.

  • La tarea CreateProperty puede emitir una propiedad(desusado).

  • A partir de .NET Framework 3.5, los elementos Target pueden contener elementos PropertyGroup que pueden contener declaraciones de propiedad.

Almacenar código XML en las propiedades

Las propiedades pueden contener código XML arbitrario, que puede ayudar a pasar valores a las tareas o a mostrar información de registro.En el ejemplo siguiente se muestra la propiedad ConfigTemplate, que tiene un valor que contiene código XML y referencias a otras propiedades.MSBuild reemplaza dichas referencias con los respectivos valores de propiedad.Los valores de propiedad se asignan en el orden en que aparecen.Por consiguiente, en este ejemplo, $(MySupportedVersion), $(MyRequiredVersion)y $(MySafeMode) ya deben haberse definido.

<PropertyGroup>
    <ConfigTemplate>
        <Configuration>
            <Startup>
                <SupportedRuntime
                    ImageVersion="$(MySupportedVersion)"
                    Version="$(MySupportedVersion)"/>
                <RequiredRuntime
                    ImageVersion="$(MyRequiredVersion)
                    Version="$(MyRequiredVersion)"
                    SafeMode="$(MySafeMode)"/>
            </Startup>
        </Configuration>
    </ConfigTemplate>
</PropertyGroup>

Vea también

Tareas

Cómo: Utilizar variables de entorno al compilar

Cómo: Hacer referencia al nombre o ubicación del archivo de proyecto

Cómo: Compilar los mismos archivos de código fuente con diferentes opciones

Referencia

Propiedades reservadas de MSBuild

Elemento Property (MSBuild)

Otros recursos

Conceptos de MSBuild

MSBuild