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
Fonctions 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))
Fonctions 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
Appel 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>
Fonctions 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
-->