Funções de propriedade
No.NET Framework versão 4, propriedade funções podem ser usadas para avaliar os scripts do MSBuild. Funções de propriedade podem ser usadas sempre que propriedades são exibidas. Ao contrário de tarefas, funções de propriedade podem ser usadas fora de destinos e são avaliadas antes de executar qualquer destino.
Sem o uso de tarefas do MSBuild, você pode ler a hora do sistema, comparar seqüências de caracteres, corresponder expressões regulares e realizar outras ações no script de construção. MSBuild tentará converter string em número e o número de seqüência de caracteres e fazer outras conversões conforme necessário.
Sintaxe da função de propriedade
Esses são os três tipos de funções de propriedade; cada função tem uma sintaxe diferente:
Funções de propriedade de cadeia de caracteres (instância)
Funções de propriedade estática
Funções de propriedade do MSBuild
Funções de propriedade de seqüência
Todos os valores de propriedade de compilação são apenas os valores de seqüência de caracteres. Você pode usar métodos de string (instância) para operar em qualquer valor de propriedade. Por exemplo, você pode extrair o nome da unidade (os primeiros três caracteres) a partir de uma propriedade de compilação que representa um caminho completo usando este código:
$(ProjectOutputFolder.Substring(0,3))
Funções de propriedade estática
No script de construção, você pode acessar as propriedades estáticas e os métodos de muitas classes de sistema. Para obter o valor de uma propriedade estática, use a seguinte sintaxe, onde classe é o nome da classe system e propriedade é o nome da propriedade.
$([Class]::Property)
Por exemplo, você pode usar o seguinte código para definir uma propriedade de compilação para a data e hora atuais.
<Today>$([System.DateTime]::Now)</Today>
Para chamar um método estático, use a seguinte sintaxe, onde classe é o nome da classe system, método é o nome do método, e (parâmetros) é a lista de parâmetro para o método:
$([Class]::Member(Parameters))
Por exemplo, para definir uma propriedade de compilação para um novo GUID, você pode usar este script:
<NewGuid>$([System.Guid]::NewGuid())</NewGuid>
Nas funções de propriedade estática, você pode usar qualquer método estático ou a propriedade dessas classes de sistema:
System.Byte
System. Char
System. Convert
DateTime
System.Decimal
System. Double
System. Enum
GUID
System. Int16
Int32
Int64
System.IO.Path
System. Math
System. UInt16
System. UInt32
UInt64
System. SByte
Single
System. String
System.StringComparer
TimeSpan
System.Text.RegularExpressions.Regex
Microsoft.Build.Utilities.ToolLocationHelper
Além disso, você pode usar os seguintes métodos estáticos e propriedades:
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
Chamar os métodos de instância em Propriedades estáticas
Se você acessar uma propriedade estática que retorna uma instância do objeto, você pode chamar os métodos de instância desse objeto. Para chamar um método de instância, use a seguinte sintaxe, onde classe é o nome da classe system, propriedade é o nome da propriedade, o método é o nome do método, e (parâmetros) é a lista de parâmetro para o método:
$([Class]:: Property.Method(Parameters))
O nome da classe deve ser totalmente qualificado com o namespace.
Por exemplo, você pode usar o seguinte código para definir uma propriedade de compilação hoje com a data atual.
<Today>$([System.DateTime]::Now.ToString("yyyy.MM.dd"))</Today>
Funções de propriedade do MSBuild
Vários métodos estáticos em sua compilação podem ser acessados para fornecer aritmético, bit a bit lógico e o suporte ao caractere de escape. Acesso a esses métodos usando a sintaxe a seguir, onde método é o nome do método e parâmetros de é a lista de parâmetro para o método.
$([MSBuild]::Method(Parameters))
Por exemplo, para adicionar juntos duas propriedades que possuem valores numéricos, use o código a seguir.
$([MSBuild]::Add($(NumberOne), $(NumberTwo))
Aqui está uma lista de funções de propriedade do MSBuild:
Assinatura de função |
Descrição |
---|---|
Adicionar de duplo (double, double b) |
Adicione duas dobras. |
Adicionar de tempo (long, long b) |
Adicione dois longos. |
Subtrair de duplo (double, double b) |
Subtrair duas dobras. |
longo subtrair (long, long b) |
Subtrair dois longos. |
Double multiplicar (double, double b) |
Multiplica duas dobras. |
longo multiplicar (long, long b) |
Multiplica dois números de longos. |
Double dividir (double, double b) |
Divida duas dobras. |
longo dividir (long, long b) |
Divida dois números de longos. |
duplo (double, double b) de módulo |
Módulo de duas dobras. |
longas seqüências de módulo (long, long b) |
Módulo dois longos. |
string Escape(string unescaped) |
A seqüência de acordo com as regras de escape do MSBuild de escape. |
string (seqüência de escape) de Unescape |
Unescape a seqüência de acordo com as regras de escape do MSBuild. |
int BitwiseOr (int int de primeiro, segundo) |
Executar um bit a bit OR no primeiro e segundo (primeira | segundo). |
int BitwiseAnd (int int de primeiro, segundo) |
Executar um bit a bit AND no primeiro e segundo (primeira & segundo). |
int BitwiseXor (int int de primeiro, segundo) |
Executar um bit a bit XOR no primeiro e segundo (primeira ^ segundo). |
int BitwiseNot(int first) |
Executar um bit a bit NOT (~ primeiro). |
GetRegistryValueFromView do MSBuild
O MSBuild GetRegistryValueFromView a função de propriedade obtém dados de registro do sistema fornecidos a chave do registro, o valor e um ou mais encomendado modos de exibição do registro. A chave e valor são pesquisados em cada modo de exibição do registro na ordem até que eles são encontrados.
A sintaxe para essa função de propriedade é:
[MSBuild]:: GetRegistryValueFromView (keyName de string, string valueName, objeto defaultValue, modos de exibição do params objeto [])
Sistema operacional Windows 64-bit mantém uma chave de registro de HKEY_LOCAL_MACHINE\Software\Wow6432Node. apresenta uma exibição do registro HKEY_LOCAL_MACHINE\SOFTWARE para aplicativos de 32 bits.
Por padrão, um aplicativo de 32 bits em execução no WOW64 acessa o modo de exibição do registro de 32 bits e um aplicativo de 64 bits acessa o modo de exibição do registro de 64 bits.
Os seguintes modos de exibição do registro estão disponíveis:
Modo de exibição do registro |
Definição |
---|---|
RegistryView.Registry32 |
O modo de exibição do registro do aplicativo de 32 bits. |
RegistryView.Registry64 |
O modo de exibição do registro do aplicativo de 64 bits. |
RegistryView.Default |
O modo de exibição do registro que coincide com o processo que está executando o aplicativo. |
Por exemplo,
$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Silverlight\v3.0\ReferenceAssemblies', 'SLRuntimeInstallPath', null, RegistryView.Registry64, RegistryView.Registry32))
Obtém os dados de SLRuntimeInstallPath da chave ReferenceAssemblies, olhando primeiro no modo de exibição do registro de 64 bits e, em seguida, no modo de exibição do registro de 32 bits.
GetRegistryValue do MSBuild
O MSBuild GetRegistryValue a função de propriedade retorna o valor de uma chave de registro. Esta função leva dois argumentos, o nome da chave e o nome do valor. Ele retorna o valor do registro. Se você não especificar um nome de valor, o valor padrão é retornado.
Os exemplos a seguir mostram como essa função é usada:
$([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
GetDirectoryNameOfFileAbove do MSBuild
O MSBuild GetDirectoryNameOfFileAbove a função de propriedade procura por um arquivo nos diretórios sobre a pasta atual em que o caminho.
A sintaxe para essa função de propriedade é:
$[MSBuild]::GetDirectoryNameOfFileAbove(string ThePath, string TheFile)
Por exemplo:
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))\EnlistmentInfo.props" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))' != '' " />
Funções aninhadas de propriedade
Funções de propriedade podem ser combinadas para formulário funções mais complexas. Por exemplo,
$([MSBuild]::BitwiseAnd(32, $([System.IO.File]::GetAttributes(tempFile))))
Retorna o valor de FileAttributes Archive bits (32 ou 0) do arquivo fornecido pelo caminho tempFile. Observe que os valores de dados enumerado não podem aparecer por nome dentro de funções de propriedade. Em vez disso, o valor numérico (32) deve ser usado.
Metadados também podem aparecer em funções aninhadas de propriedade. Para obter mais informações, consulte Processamento em lotes do MSBuild.