Partager via


Fonctions de propriété

Dans le.NET Framework version 4 et 4,5, les fonctions de propriétés peuvent être utilisées pour évaluer des scripts MSBuild.Les fonctions de propriétés peuvent être utilisées partout où des propriétés apparaissent.Contrairement aux tâches, les fonctions de propriétés peuvent être utilisées en dehors des cibles et sont évaluées avant toute exécution de cible.

Vous pouvez lire l'heure système, comparer des chaînes, rechercher des expressions régulières et exécuter d'autres actions dans votre script de build sans utiliser de tâches MSBuild.MSBuild essaiera de convertir la chaîne en nombre et le nombre en chaîne, et effectuera d'autres conversions selon les besoins.

Dans cette rubrique :

  • Syntaxe de fonction de propriété

    • Fonctions de propriétés de type chaîne

    • Fonctions de propriétés statiques

    • Appel de méthodes d'instance sur des propriétés statiques

    • Fonctions de propriétés MSBuild

  • Fonctions de propriétés imbriquées

  • MSBuild DoesTaskHostExist

  • GetDirectoryNameOfFileAbove MSBuild

  • GetRegistryValue MSBuild

  • MSBuild GetRegistryValueFromView

  • MSBuild MakeRelative

  • MSBuild ValueOrDefault

Syntaxe de fonction de propriété

Il existe trois genres de fonctions de propriété ; chaque fonction a une syntaxe différente :

  • Fonctions de propriété de type chaîne (instance)

  • Fonctions de propriétés statiques

  • Fonctions de propriétés MSBuild

Dd633440.collapse_all(fr-fr,VS.110).gifFonctions de propriétés de type chaîne

Toutes les valeurs de propriété de génération sont seulement des valeurs de chaîne.Vous pouvez utiliser des méthodes de chaîne (instance) pour agir sur toute valeur de propriété.Par exemple, vous pouvez extraire le nom de lecteur (trois premiers caractères) d'une propriété de génération qui représente un chemin d'accès complet à l'aide de ce code :

$(ProjectOutputFolder.Substring(0,3))

Dd633440.collapse_all(fr-fr,VS.110).gifFonctions de propriétés statiques

Dans votre script de build, vous pouvez accéder aux méthodes et aux propriétés statiques de nombreuses classes système.Pour obtenir la valeur d'une propriété statique, utilisez la syntaxe suivante, où Classe est le nom de la classe système et Propriété le nom de la propriété.

$([Class]::Property)

Par exemple, vous pouvez utiliser le code suivant pour affecter à une propriété de génération la date et l'heure en cours.

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

Pour appeler une méthode statique, utilisez la syntaxe suivante, où Classe est le nom de la classe système, Méthode le nom de la méthode et (Paramètres) la liste des paramètres pour la méthode :

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

Par exemple, vous pouvez utiliser ce script pour affecter un nouveau GUID comme valeur à une propriété de génération :

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

Dans les fonctions de propriétés statiques, vous pouvez utiliser n'importe quelle méthode ou propriété statique de ces classes système :

  • 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

De plus, vous pouvez utiliser les méthodes et les propriétés statiques suivantes :

  • 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(fr-fr,VS.110).gifAppel de méthodes d'instance sur des propriétés statiques

Si vous accédez à une propriété statique qui retourne une instance d'objet, vous pouvez appeler les méthodes d'instance de cet objet.Pour appeler une méthode d'instance, utilisez la syntaxe suivante, où Classe est le nom de la classe système, Propriété le nom de la propriété, Méthode le nom de la méthode et (Paramètres) la liste des paramètres pour la méthode :

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

Le nom de la classe doit être complet avec l'espace de noms.

Par exemple, vous pouvez utiliser le code suivant pour affecter à une propriété de génération la date du jour.

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

Dd633440.collapse_all(fr-fr,VS.110).gifFonctions de propriétés MSBuild

Plusieurs méthodes statiques dans votre build permettent de fournir un support en termes d'arithmétique, de logique de bits et de caractère d'échappement.Vous accédez à ces méthodes à l'aide de la syntaxe suivante, où Méthode est le nom de la méthode et Paramètres la liste des paramètres pour la méthode.

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

Par exemple, pour ajouter deux propriétés qui ont des valeurs numériques, utilisez le code suivant.

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

Voici la liste des fonctions de propriétés MSBuild :

Signature de la fonction

Description

double Add(double a, double b)

Ajoutez deux doubles.

long Add(long a, long b)

Ajoutez deux longs.

double Subtract(double a, double b)

Soustrayez deux doubles.

long Subtract(long a, long b)

Soustrayez deux longs.

double Multiply(double a, double b)

Multipliez deux doubles.

long Multiply(long a, long b)

Multipliez deux longs.

double Divide(double a, double b)

Divisez deux doubles.

long Divide(long a, long b)

Divisez deux longs.

double Modulo(double a, double b)

Modulo deux doubles.

long Modulo(long a, long b)

Modulo deux longs.

string Escape(string unescaped)

Appliquez une séquence d'échappement à la chaîne d'après les règles d'échappement MSBuild.

string Unescape(string escaped)

N'appliquez pas de séquence d'échappement à la chaîne d'après les règles d'échappement MSBuild.

int BitwiseOr(int first, int second)

Exécutez une opération de bits OR sur le premier et le second (premier | second).

int BitwiseAnd(int first, int second)

Exécutez une opération de bits AND sur le premier et le second (premier & second).

int BitwiseXor(int first, int second)

Exécutez une opération de bits XOR sur le premier et le second (premier ^ second).

int BitwiseNot(int first)

Exécutez une opération de bits NOT (~ premier).

Fonctions de propriétés imbriquées

Vous pouvez combiner des fonctions de propriété pour former des fonctions plus complexes, comme indiqué dans l'exemple suivant.

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

Cet exemple retourne la valeur d' FileAttributes bit Archive (32 ou 0) du fichier spécifié par le chemin tempFile.Remarquez que les valeurs de données énumérées ne peuvent pas apparaître par nom dans les fonctions de propriétés.La valeur numérique (32) doit être utilisée à la place.

Les métadonnées peuvent également s'afficher dans les fonctions de propriétés imbriquées.Pour plus d’informations, consultez Traitement par lots de MSBuild.

MSBuild DoesTaskHostExist

La fonction de propriété d' DoesTaskHostExist dans MSBuild retourne si un hôte de tâche est actuellement installée pour les valeurs spécifiées de runtime et d'architecture.

Cette fonction de propriété a la syntaxe suivante :

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

GetDirectoryNameOfFileAbove MSBuild

La fonction de propriété GetDirectoryNameOfFileAbove de MSBuild recherche un fichier dans les répertoires sur le répertoire actif dans le chemin d'accès.

Cette fonction de propriété a la syntaxe suivante :

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

Le code suivant est un exemple de cette syntaxe.

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

GetRegistryValue MSBuild

La fonction de propriété GetRegistryValue de MSBuild retourne la valeur d'une clé de Registre.Cette fonction prend deux arguments, le nom de la clé et le nom de la valeur, et retourne la valeur du Registre.Si vous ne spécifiez pas un nom de valeur, la valeur par défaut est retournée.

Les exemples suivants montrent comment cette fonction est utilisée :

$([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 fonction de la propriété GetRegistryValueFromView MSBuild obtient des données de la base de registres en fonction de la clé et de la valeur de Registre, et d'un ou de plusieurs affichages de Registre classés.La recherche de la clé et de la valeur s'effectue dans chaque affichage de Registre dans l'ordre, jusqu'à ce qu'elles soient trouvées.

La syntaxe de cette fonction de propriété est la suivante :

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

Le système d'exploitation 64 bits de Windows gère une clé de Registre HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node qui présente un affichage de Registre HKEY_LOCAL_MACHINE\SOFTWARE pour les applications 32 bits.

Par défaut, une application 32 bits qui fonctionne sur WOW64 accède à l'affichage de Registre 32 bits et une application 64 bits accède à l'affichage de Registre 64 bits.

Les affichages de Registre suivants sont disponibles :

Affichage de Registre

Définition

RegistryView.Registry32

Affichage de Registre d'application 32 bits.

RegistryView.Registry64

Affichage de Registre d'application 64 bits.

RegistryView.Default

Affichage de Registre qui correspond au processus sur lequel l'application s'exécute.

Voici un exemple :

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

obtient les données SLRuntimeInstallPath de la clé ReferenceAssemblies, en regardant d'abord dans l'affichage de Registre 64 bits puis dans l'affichage de Registre 32 bits.

MSBuild MakeRelative

La fonction de propriété de MSBuild MakeRelative retourne le chemin d'accès relatif du deuxième chemin d'accès relatif au premier accès.Chaque chemin d'accès peut être un fichier ou dossier.

Cette fonction de propriété a la syntaxe suivante :

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

Le code suivant est un exemple de cette syntaxe.

<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 fonction de propriété de MSBuild ValueOrDefault retourne le premier argument, à moins qu'il soit null ou vide.Si le premier argument est null ou vide, la fonction retourne le deuxième argument.

l'exemple suivant montre comment cette fonction est utilisée.

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

Voir aussi

Concepts

Propriétés MSBuild

Autres ressources

MSBuild