Condividi tramite


Funzioni delle proprietà

In.NET Framework versioni 4 e 4,5, le funzioni di proprietà possono essere utilizzate per valutare gli script MSBuild.Le funzioni di proprietà possono essere utilizzate in qualsiasi punto in cui siano presenti proprietà.A differenza delle attività, le funzioni di proprietà possono essere utilizzate all'esterno delle destinazioni e vengono valutate prima dell'esecuzione di qualsiasi destinazione.

Grazie a tali funzioni è possibile leggere l'ora di sistema, confrontare stringhe, trovare la corrispondenza per espressioni regolari ed eseguire altre azioni negli script di compilazione, il tutto senza utilizzare le attività MSBuild.MSBuild tenterà di convertire le stringhe in numeri e i numeri in stringhe nonché di eseguire altre conversioni secondo le esigenze.

In questo argomento:

  • Sintassi delle funzioni di proprietà

    • Funzioni di proprietà stringa

    • Funzioni di proprietà statiche

    • Chiamata di metodi di istanza su proprietà statiche

    • Funzioni di proprietà MSBuild

  • Funzioni di proprietà annidate

  • MSBuild DoesTaskHostExist

  • GetDirectoryNameOfFileAbove MSBuild

  • GetRegistryValue MSBuild

  • MSBuild GetRegistryValueFromView

  • MSBuild MakeRelative

  • MSBuild ValueOrDefault

Sintassi delle funzioni di proprietà

Di seguito sono elencati tre tipi di funzioni di proprietà. Ogni funzione presenta una sintassi diversa:

  • Funzioni di proprietà stringa (istanza)

  • Funzioni di proprietà statiche

  • Funzioni di proprietà MSBuild

Dd633440.collapse_all(it-it,VS.110).gifFunzioni di proprietà stringa

Tutti i valori di proprietà di compilazione sono soltanto valori stringa.Per agire su qualsiasi valore di proprietà è possibile utilizzare i metodi stringa (istanza).Ad esempio, è possibile estrarre il nome di unità (ovvero i primi tre caratteri) da una proprietà di compilazione che rappresenta un percorso completo tramite questo codice:

$(ProjectOutputFolder.Substring(0,3))

Dd633440.collapse_all(it-it,VS.110).gifFunzioni di proprietà statiche

Nello script di compilazione è possibile accedere alle proprietà e ai metodi statici di molte classi di sistema.Per ottenere il valore di una proprietà statica si utilizza la sintassi seguente, dove Class è il nome della classe di sistema e Property è il nome della proprietà.

$([Class]::Property)

Ad esempio, è possibile utilizzare il codice seguente per impostare una proprietà di compilazione sulla data e sull'ora correnti.

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

Per chiamare un metodo statico si utilizza la sintassi seguente, dove Class è il nome della classe di sistema, Method è il nome del metodo e (Parameters) è l'elenco di parametri del metodo:

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

Ad esempio per impostare una proprietà di compilazione su un nuovo GUID, è possibile utilizzare lo script seguente:

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

Nelle funzioni di proprietà statiche è possibile utilizzare qualsiasi proprietà o metodo statico delle classi di sistema seguenti:

  • 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

Inoltre, è possibile utilizzare i metodi e le proprietà statici seguenti:

  • 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(it-it,VS.110).gifChiamata di metodi di istanza su proprietà statiche

Se si accede a una proprietà statica che restituisce un'istanza di un oggetto, è possibile richiamare i metodi di istanza di tale oggetto.Per richiamare un metodo di istanza si utilizza la sintassi seguente, dove Class è il nome della classe di sistema, Property è il nome della proprietà, Method è il nome del metodo e (Parameters) è l'elenco di parametri del metodo:

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

Il nome della classe deve essere completo con lo spazio dei nomi.

Ad esempio, è possibile utilizzare il codice seguente per impostare una proprietà di compilazione sulla data corrente.

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

Dd633440.collapse_all(it-it,VS.110).gifFunzioni di proprietà MSBuild

È possibile accedere a diversi metodi statici nella build per supportare funzionalità aritmetiche, operazioni logiche bit per bit nonché la gestione dei caratteri di escape.Per accedere a questi metodi si utilizza la sintassi seguente, dove Method è il nome del metodo e Parameters è l'elenco di parametri del metodo.

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

Ad esempio, per sommare due proprietà che presentano valori numerici, utilizzare il codice seguente.

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

Segue un elenco di funzioni di proprietà MSBuild:

Firma funzione

Descrizione

double Add(double a, double b)

Esegue l'addizione di due Double.

long Add(long a, long b)

Esegue l'addizione di due Long.

double Subtract(double a, double b)

Esegue la sottrazione fra due Double.

long Subtract(long a, long b)

Esegue la sottrazione fra due Long.

double Multiply(double a, double b)

Esegue la moltiplicazione fra due Double.

long Multiply(long a, long b)

Esegue la moltiplicazione fra due Long.

double Divide(double a, double b)

Esegue la divisione fra due Double.

long Divide(long a, long b)

Esegue la divisione fra due Long.

double Modulo(double a, double b)

Esegue la divisione di modulo fra due Double.

long Modulo(long a, long b)

Esegue la divisione di modulo fra due Long.

string Escape(stringa senza codice di escape)

Applica i caratteri di escape alla stringa in base alle regole di escape di MSBuild.

string Unescape(stringa con codice di escape)

Rimuove i caratteri di escape alla stringa in base alle regole di escape di MSBuild.

int BitwiseOr(int primo, int secondo)

Esegue un'operazione OR bit per bit fra il primo e il secondo valore (primo | secondo).

int BitwiseAnd(int primo, int secondo)

Esegue un'operazione AND bit per bit fra il primo e il secondo valore (primo & secondo).

int BitwiseXor(int primo, int secondo)

Esegue un'operazione XOR bit per bit fra il primo e il secondo valore (primo ^ secondo).

int BitwiseNot(int primo)

Esegue un'operazione NOT bit per bit (~ primo).

Funzioni di proprietà annidate

È possibile combinare le funzioni di proprietà per formare funzioni più complesse, come illustrato di seguito.

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

In questo esempio restituisce il valore di bit FileAttributesArchive (32 o 0) del file fornito dal percorso tempFile.Notare che i valori dei dati enumerati non possono essere specificati per nome all'interno delle funzioni di proprietà.Occorre utilizzare invece il valore numerico (32).

Nelle funzioni di proprietà annidate è inoltre possibile specificare metadati.Per ulteriori informazioni, vedere Batch MSBuild.

MSBuild DoesTaskHostExist

La funzione di proprietà DoesTaskHostExist in MSBuild restituisce se un host di attività è attualmente installata per i valori specificatiarchitettura e di runtime.

Questa funzione di proprietà con la seguente sintassi:

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

GetDirectoryNameOfFileAbove MSBuild

La funzione di proprietà GetDirectoryNameOfFileAbove MSBuild cerca un file nelle directory vicine alla directory corrente nel percorso.

Questa funzione di proprietà con la seguente sintassi:

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

Il codice seguente è un esempio di questa sintassi.

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

GetRegistryValue MSBuild

La funzione di proprietà GetRegistryValue MSBuild restituisce il valore di una chiave del Registro di sistema.Questa funzione accetta due argomenti, il nome della chiave e il nome del valore e restituisce il valore dal Registro di sistema.Se non si specifica un nome del valore, viene restituito il valore predefinito.

Negli esempi seguenti viene illustrato come utilizzare questa funzione:

$([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

MSBuild GetRegistryValueFromView

La funzione di proprietà MSBuild GetRegistryValueFromView ottiene dati del registro di sistema in base alla chiave e al valore del Registro di sistema forniti, nonché a una o più visualizzazioni ordinate del Registro di sistema.La chiave e il valore vengono cercati in ogni visualizzazione del Registro di sistema in ordine, finché non vengono individuati.

Di seguito è indicata la sintassi per la funzione della proprietà:

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

Il sistema operativo Windows a 64 bit gestisce una chiave del Registro di sistema HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node che presenta una visualizzazione del Registro di sistema HKEY_LOCAL_MACHINE\SOFTWARE per le applicazioni a 32 bit.

Per impostazione predefinita, un'applicazione a 32 bit in esecuzione su WOW64 accede alla visualizzazione del Registro di sistema a 32 bit e un'applicazione a 64 bit accede alla visualizzazione del Registro di sistema a 64 bit.

Sono disponibili le visualizzazioni del Registro di sistema seguenti:

Visualizzazione del Registro di sistema

Definizione

RegistryView.Registry32

Visualizzazione del Registro di sistema dell'applicazione a 32 bit.

RegistryView.Registry64

Visualizzazione del Registro di sistema dell'applicazione a 64 bit.

RegistryView.Default

Visualizzazione del Registro di sistema che corrisponde al processo su cui è in esecuzione l'applicazione.

Di seguito è riportato un esempio.

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

ottiene i dati SLRuntimeInstallPath della chiave ReferenceAssemblies, cercandoli in primo luogo nella visualizzazione del Registro di sistema a 64 bit, quindi in quella a 32 bit.

MSBuild MakeRelative

La funzione di proprietà MSBuild MakeRelative restituisce il percorso relativo del secondo percorso relativo al primo percorso.Ogni percorso può essere un file o una cartella.

Questa funzione di proprietà con la seguente sintassi:

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

Il codice seguente è un esempio di questa sintassi.

<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 funzione di proprietà MSBuild ValueOrDefault restituisce il primo argomento, a meno che non sia null o vuota.Se il primo argomento è null o vuota, la funzione restituisce il secondo argomento.

Di seguito viene illustrato come utilizzare questa funzione.

<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
-->

Vedere anche

Concetti

Proprietà di MSBuild

Altre risorse

MSBuild