Compartir a través de


Funciones de propiedad

En las versiones 4 y 4,5 de .NET Framework, las funciones de propiedad se puede utilizar para evaluar los scripts de MSBuild.Las funciones de propiedad se pueden utilizar dondequiera que aparezcan propiedades.A diferencia de las tareas, las funciones de propiedad se pueden utilizar fuera de los destinos y se evalúan antes de la ejecución de cualquier destino.

Sin usar tareas de MSBuild, se puede leer la hora del sistema, comparar cadenas, buscar coincidencias de expresiones regulares y realizar otras acciones en el script de compilación.MSBuild intentará convertir cadenas en números y números en cadenas, y realizar otras conversiones que sean necesarias.

En este tema:

  • Sintaxis de las funciones de propiedad

    • Funciones de propiedad de cadena

    • Funciones de propiedad estática

    • Llamar a métodos de instancia en propiedades estáticas

    • Funciones de propiedad de MSBuild

  • Funciones de propiedad anidadas

  • MSBuild DoesTaskHostExist

  • GetDirectoryNameOfFileAbove de MSBuild

  • GetRegistryValue de MSBuild

  • GetRegistryValueFromView de MSBuild

  • MSBuild MakeRelative

  • MSBuild ValueOrDefault

Sintaxis de las funciones de propiedad

Hay tres tipos de funciones de propiedad; cada función tiene una sintaxis diferente:

  • Funciones de propiedad de cadena (instancia)

  • Funciones de propiedad estática

  • Funciones de propiedad de MSBuild

Dd633440.collapse_all(es-es,VS.110).gifFunciones de propiedad de cadena

Todos los valores de propiedad de compilación son simplemente valores de cadena.Se pueden usar métodos de tipo string (instancia) con cualquier valor de propiedad.Por ejemplo, se puede extraer el nombre de unidad (los tres primeros caracteres) de una propiedad de compilación que represente una ruta de acceso completa utilizando este código:

$(ProjectOutputFolder.Substring(0,3))

Dd633440.collapse_all(es-es,VS.110).gifFunciones de propiedad estática

En el script de compilación, se puede tener acceso a las propiedades y métodos estáticos de muchas clases del sistema.Para obtener el valor de una propiedad estática, utilice la sintaxis siguiente, donde Class es el nombre de la clase del sistema y Property es el nombre de la propiedad.

$([Class]::Property)

Por ejemplo, puede utilizar el código siguiente para establecer el valor de una propiedad de compilación en la fecha y hora actuales.

<Today>$([System.DateTime]::Now)</Today>

Para llamar a un método estático, utilice la sintaxis siguiente, donde Class es el nombre de la clase del sistema, Method es el nombre del método y (Parameters) es la lista de parámetros para el método:

$([Class]::Member(Parameters))

Por ejemplo, para establecer el valor de una propiedad de compilación en un nuevo GUID, puede utilizar este script:

<NewGuid>$([System.Guid]::NewGuid())</NewGuid>

En las funciones de propiedad estática, puede utilizar cualquier propiedad o método estático de estas clases del sistema:

  • System.Byte

  • System.Char

  • System.Convert

  • System.DateTime

  • System.Decimal

  • System.Double

  • System.Enum

  • System.Guid

  • System.Int16

  • System.Int32

  • System.Int64

  • System.IO.Path

  • System.Math

  • System.UInt16

  • System.UInt32

  • System.UInt64

  • System.SByte

  • System.Single

  • System.String

  • System.StringComparer

  • System.TimeSpan

  • System.Text.RegularExpressions.Regex

  • Microsoft.Build.Utilities.ToolLocationHelper

Además, puede utilizar las propiedades y métodos estáticos siguientes:

  • System.Environment::CommandLine

  • System.Environment::ExpandEnvironmentVariables

  • System.Environment::GetEnvironmentVariable

  • System.Environment::GetEnvironmentVariables

  • System.Environment::GetFolderPath

  • System.Environment::GetLogicalDrives

  • System.IO.Directory::GetDirectories

  • System.IO.Directory::GetFiles

  • System.IO.Directory::GetLastAccessTime

  • System.IO.Directory::GetLastWriteTime

  • System.IO.Directory::GetParent

  • System.IO.File::Exists

  • System.IO.File::GetCreationTime

  • System.IO.File::GetAttributes

  • System.IO.File::GetLastAccessTime

  • System.IO.File::GetLastWriteTime

  • System.IO.File::ReadAllText

Dd633440.collapse_all(es-es,VS.110).gifLlamar a métodos de instancia en propiedades estáticas

Si tiene acceso a una propiedad estática que devuelve una instancia de objeto, puede llamar a los métodos de instancia de ese objeto.Para llamar a un método de instancia, utilice la sintaxis siguiente, donde Class es el nombre de la clase del sistema, Property es el nombre de la propiedad, Method es el nombre del método y (Parameters) es la lista de parámetros para el método:

$([Class]:: Property.Method(Parameters))

El nombre de la clase debe ser el nombre completo, incluido el espacio de nombres.

Por ejemplo, puede utilizar el código siguiente para establecer el valor de una propiedad de compilación en la fecha de hoy.

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

Dd633440.collapse_all(es-es,VS.110).gifFunciones de propiedad de MSBuild

Se puede tener acceso a varios métodos estáticos de la compilación para proporcionar operaciones aritméticas, operaciones lógicas bit a bit y caracteres de escape.El acceso a estos métodos se obtiene utilizando la sintaxis siguiente, donde Method es el nombre del método y Parameters es la lista de parámetros para el método.

$([MSBuild]::Method(Parameters))

Por ejemplo, para sumar los valores de dos propiedades que tienen valores numéricos, utilice el código siguiente.

$([MSBuild]::Add($(NumberOne), $(NumberTwo))

A continuación se proporciona una lista de funciones de propiedad de MSBuild:

Firma de la función

Descripción

double Add(double a, double b)

Suma dos valores Double.

long Add(long a, long b)

Suma dos valores Long.

double Subtract(double a, double b)

Resta dos valores Double.

long Subtract(long a, long b)

Resta dos valores Long.

double Multiply(double a, double b)

Multiplica dos valores Double.

long Multiply(long a, long b)

Multiplica dos valores Long.

double Divide(double a, double b)

Divide dos valores Double.

long Divide(long a, long b)

Divide dos valores Long.

double Modulo(double a, double b)

Calcula el resto de la división de dos valores Double.

long Modulo(long a, long b)

Calcula el resto de la división de dos valores Long.

string Escape(string unescaped)

Realiza el escape de la cadena de acuerdo con las reglas de establecimiento de secuencias de escape de MSBuild.

string Unescape(string escaped)

Evita el escape de la cadena de acuerdo con las reglas de establecimiento de secuencias de escape deMSBuild.

int BitwiseOr(int first, int second)

Realiza una operación OR bit a bit en el primero y segundo valor (primero | segundo).

int BitwiseAnd(int first, int second)

Realiza una operación AND bit a bit en el primero y segundo valor (primero & segundo).

int BitwiseXor(int first, int second)

Realiza una operación XOR bit a bit en el primero y segundo valor (primero ^ segundo).

int BitwiseNot(int first)

Realiza una operación NOT bit a bit (~primero).

Funciones de propiedad anidadas

Puede combinar funciones de propiedad para formar funciones más complejas, como se muestra en el ejemplo siguiente.

$([MSBuild]::BitwiseAnd(32,   $([System.IO.File]::GetAttributes(tempFile))))

Este ejemplo devuelve el valor FileAttributesArchive mordido (32 o 0) del archivo especificado por la ruta tempFile.Observe que los valores de datos enumerados no pueden aparecer por el nombre en las funciones de propiedad.Se debe utilizar el valor numérico (32) en su lugar.

En las funciones de propiedad anidadas también pueden aparecer metadatos.Para obtener más información, vea Procesamiento por lotes de MSBuild.

MSBuild DoesTaskHostExist

La función de propiedad DoesTaskHostExist en MSBuild devuelve si un host de la tarea está instalado actualmente por los valores especificados de tiempo de ejecución y arquitectura.

Esta función de propiedad tiene la siguiente sintaxis:

$[MSBuild]::DoesTaskHostExist(string theRuntime, string theArchitecture)

GetDirectoryNameOfFileAbove de MSBuild

La función de propiedad GetDirectoryNameOfFileAbove de MSBuild busca en un archivo en los directorios el directorio actual de la ruta de acceso.

Esta función de propiedad tiene la siguiente sintaxis:

$[MSBuild]::GetDirectoryNameOfFileAbove(string ThePath, string TheFile)

El código siguiente es un ejemplo de esta sintaxis.

<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))\EnlistmentInfo.props" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))' != '' " />

GetRegistryValue de MSBuild

La función de propiedad GetRegistryValue de MSBuild devuelve el valor de una clave del Registro.Esta función toma dos argumentos, el nombre de clave y nombre de valor, y devuelve el valor del registro.Si no especifica un nombre de valor, se devuelve el valor predeterminado.

En los ejemplos siguientes se muestra cómo se usa esta función:

$([MSBuild]::GetRegistryValue(`HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\Debugger`, ``))                                  // default value
$([MSBuild]::GetRegistryValue(`HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\Debugger`, `SymbolCacheDir`))
$([MSBuild]::GetRegistryValue(`HKEY_LOCAL_MACHINE\SOFTWARE\(SampleName)`, `(SampleValue)`))             // parens in name and value

GetRegistryValueFromView de MSBuild

La función de propiedad GetRegistryValueFromView de MSBuild obtiene datos del Registro del sistema dados la clave del Registro, el valor y una o varias vistas ordenadas del Registro.La clave y el valor se buscan en todas las ventanas del Registro por orden hasta que se encuentren.

La sintaxis de esta función de propiedad es:

[MSBuild]::GetRegistryValueFromView(string keyName, string valueName, object defaultValue, params object[] views)

El sistema operativo Windows de 64 bits mantiene una clave del Registro HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node que presenta una vista del Registro HKEY_LOCAL_MACHINE\SOFTWARE para las aplicaciones de 32 bits.

De forma predeterminada, una aplicación de 32 bits que se ejecuta en WOW64 obtiene acceso a la vista del Registro de 32 bits y una aplicación de 64 bits obtiene acceso a la de 64 bits.

Existen las siguientes vistas del Registro:

Vista del Registro

Definición

RegistryView.Registry32

Vista del Registro para aplicaciones de 32 bits.

RegistryView.Registry64

Vista del Registro para aplicaciones de 64 bits.

RegistryView.Default

Es la vista del Registro que se corresponde con el proceso en el que se ejecuta la aplicación.

A continuación, se muestra un ejemplo.

$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Silverlight\v3.0\ReferenceAssemblies', 'SLRuntimeInstallPath', null, RegistryView.Registry64, RegistryView.Registry32))

obtiene los datos de SLRuntimeInstallPath de la clave ReferenceAssemblies, buscando primero en la vista del Registro de 64 bits y, a continuación, en la vista del Registro de 32 bits.

MSBuild MakeRelative

La función de propiedad de MSBuild MakeRelative devuelve la ruta de acceso relativa de la segunda ruta de acceso relativa a la primera ruta.Cada ruta de acceso puede ser un archivo o una carpeta.

Esta función de propiedad tiene la siguiente sintaxis:

$[MSBuild]::MakeRelative($(FileOrFolderPath1), $(FileOrFolderPath2))

El código siguiente es un ejemplo de esta sintaxis.

<PropertyGroup>
    <Path1>c:\users\</Path1>
    <Path2>c:\users\username\</Path2>
</PropertyGroup>

<Target Name = "Go">
    <Message Text ="$([MSBuild]::MakeRelative($(Path1), $(Path2)))" />
    <Message Text ="$([MSBuild]::MakeRelative($(Path2), $(Path1)))" />
</Target>

<!--
Output:
   username\
   ..\
-->

MSBuild ValueOrDefault

La función de propiedad de MSBuild ValueOrDefault devuelve el primer argumento, a menos que sea NULL o vacío.Si el primer argumento es null o está vacía, la función devuelve el segundo argumento.

El ejemplo siguiente se muestra cómo se usa esta función.

<Project ToolsVersion="4.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

    <PropertyGroup>
        <Value1>$([MSBuild]::ValueOrDefault(`$(UndefinedValue)`, `a`))</Value1>
        <Value2>$([MSBuild]::ValueOrDefault(`b`, `$(Value1)`))</Value2>
    </PropertyGroup>

    <Target Name="MyTarget">
        <Message Text="Value1 = $(Value1)" />
        <Message Text="Value2 = $(Value2)" />
    </Target>
</Project>

<!--
Output: 
  Value1 = a
  Value2 = b
-->

Vea también

Conceptos

Propiedades de MSBuild

Otros recursos

MSBuild