Funkce vlastnostíProperty functions

Funkce vlastností jsou volání metody .NET Framework, která se zobrazují v definicích vlastností MSBuild.Property functions are calls to .NET Framework methods that appear in MSBuild property definitions. Na rozdíl od úloh lze funkce vlastností použít mimo cíle a jsou vyhodnocovány před jakýmkoli cílovým spuštěním.Unlike tasks, property functions can be used outside of targets, and are evaluated before any target runs.

Bez použití úloh nástroje MSBuild můžete přečíst systémový čas, porovnat řetězce, porovnat regulární výrazy a provádět další akce v rámci skriptu sestavení.Without using MSBuild tasks, you can read the system time, compare strings, match regular expressions, and perform other actions in your build script. Nástroj MSBuild se pokusí převést řetězec na číslo a číslo na řetězec a provést další převody podle požadavků.MSBuild will try to convert string to number and number to string, and make other conversions as required.

Řetězcové hodnoty vrácené z funkcí vlastnosti mají řídicí znaky speciální .String values returned from property functions have special characters escaped. Pokud chcete, aby byla hodnota zpracována, jako by byla vložena přímo do souboru projektu, použijte $([MSBuild]::Unescape()) k zrušení Escape speciálních znaků.If you want the value to be treated as though it was put directly in the project file, use $([MSBuild]::Unescape()) to unescape the special characters.

Funkce vlastností jsou k dispozici v .NET Framework 4 a novější.Property functions are available with .NET Framework 4 and later.

Syntaxe funkce PropertyProperty function syntax

Jedná se o tři druhy funkcí vlastností; Každá funkce má odlišnou syntaxi:These are three kinds of property functions; each function has a different syntax:

  • Funkce pro vlastnosti String (instance)String (instance) property functions
  • Funkce statických vlastnostíStatic property functions
  • Funkce vlastností MSBuildMSBuild property functions

Funkce řetězcových vlastnostíString property functions

Všechny hodnoty vlastností buildu jsou jenom řetězcové hodnoty.All build property values are just string values. Můžete použít metody řetězce (instance) k provozování libovolné hodnoty vlastnosti.You can use string (instance) methods to operate on any property value. Můžete například extrahovat název jednotky (první tři znaky) z vlastnosti Build, která představuje úplnou cestu pomocí tohoto kódu:For example, you can extract the drive name (the first three characters) from a build property that represents a full path by using this code:

$(ProjectOutputFolder.Substring(0,3))

Funkce statických vlastnostíStatic property functions

Ve svém skriptu sestavení máte přístup ke statickým vlastnostem a metodám mnoha systémových tříd.In your build script, you can access the static properties and methods of many system classes. Chcete-li získat hodnotu statické vlastnosti, použijte následující syntaxi, kde <Class> je název systémové třídy a <Property> je název vlastnosti.To get the value of a static property, use the following syntax, where <Class> is the name of the system class and <Property> is the name of the property.

$([Class]::Property)

Například můžete použít následující kód k nastavení vlastnosti Build na aktuální datum a čas.For example, you can use the following code to set a build property to the current date and time.

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

Chcete-li zavolat statickou metodu, použijte následující syntaxi, kde <Class> je název systémové třídy, <Method> je název metody a ( <Parameters> ) je seznam parametrů pro metodu:To call a static method, use the following syntax, where <Class> is the name of the system class, <Method> is the name of the method, and (<Parameters>) is the parameter list for the method:

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

Chcete-li například nastavit vlastnost Build na nový identifikátor GUID, můžete použít tento skript:For example, to set a build property to a new GUID, you can use this script:

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

Ve funkcích statických vlastností můžete použít jakoukoli statickou metodu nebo vlastnost těchto systémových tříd:In static property functions, you can use any static method or property of these system classes:

Kromě toho můžete použít následující statické metody a vlastnosti:In addition, you can use the following static methods and properties:

Volání metod instancí ve statických vlastnostechCalling instance methods on static properties

Pokud přistupujete ke statické vlastnosti, která vrací instanci objektu, můžete vyvolat metody instance daného objektu.If you access a static property that returns an object instance, you can invoke the instance methods of that object. Chcete-li vyvolat metodu instance, použijte následující syntaxi, kde <Class> je název systémové třídy, <Property> je název vlastnosti, <Method> je název metody a ( <Parameters> ) je seznam parametrů pro metodu:To invoke an instance method, use the following syntax, where <Class> is the name of the system class, <Property> is the name of the property, <Method> is the name of the method, and (<Parameters>) is the parameter list for the method:

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

Název třídy musí být plně kvalifikován pomocí oboru názvů.The name of the class must be fully qualified with the namespace.

Například můžete použít následující kód pro nastavení vlastnosti Build na aktuální datum v dnešní době.For example, you can use the following code to set a build property to the current date today.

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

Funkce vlastností MSBuildMSBuild property functions

Několik statických metod v sestavení lze použít k zajištění aritmetické, bitové logické a řídicí znakové podpory.Several static methods in your build can be accessed to provide arithmetic, bitwise logical, and escape character support. K těmto metodám přistupujete pomocí následující syntaxe, kde <Method> je název metody a ( <Parameters> ) je seznam parametrů pro metodu.You access these methods by using the following syntax, where <Method> is the name of the method and (<Parameters>) is the parameter list for the method.

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

Chcete-li například přidat dohromady dvě vlastnosti, které mají číselné hodnoty, použijte následující kód.For example, to add together two properties that have numeric values, use the following code.

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

Tady je seznam funkcí MSBuild vlastností:Here is a list of MSBuild property functions:

Signatura funkceFunction signature DescriptionDescription
dvojité přidání (dvojitá a, dvojitá přesnost b)double Add(double a, double b) Přidejte dvě dvojité.Add two doubles.
dlouhé přidání (dlouhé a, dlouhé b)long Add(long a, long b) Přidejte dvě dlouhé.Add two longs.
Dvojitý rozdíl (dvojitá a, dvojitá přesnost b)double Subtract(double a, double b) Odečte dvě dvojice.Subtract two doubles.
Long odečíst (Long a, Long b)long Subtract(long a, long b) Odečte dvě dlouhé.Subtract two longs.
dvojité násobení (Double a, double b)double Multiply(double a, double b) Vynásobení dvou dvojitých hodnot.Multiply two doubles.
Long násobení (Long a, Long b)long Multiply(long a, long b) Vynásobte dvě dlouhé.Multiply two longs.
dvojité dělení (dvojitá a, dvojitá přesnost b)double Divide(double a, double b) Vydělí dvě dvojitá čísla.Divide two doubles.
dlouhé rozdělení (Long a, Long b)long Divide(long a, long b) Rozdělte dvě dlouhé.Divide two longs.
dvojité modulo (dvojitá a, dvojitá přesnost b)double Modulo(double a, double b) Modulo dvě dvojitá přesnost.Modulo two doubles.
dlouhé modulo (dlouhé a, dlouhé b)long Modulo(long a, long b) Modulo dvě dlouhé.Modulo two longs.
Řídicí znak řetězce (řetězec bez řídicích znaků)string Escape(string unescaped) Vyřídí řetězec podle pravidel pro uvozovací znaky MSBuild.Escape the string according to MSBuild escaping rules.
řetězcové zrušení řídicího znaku (řetězcové řídicí znaky)string Unescape(string escaped) Odřídí řetězec podle pravidel pro uvozovací znaky MSBuild.Unescape the string according to MSBuild escaping rules.
Bitový operátor int (int First, int Second)int BitwiseOr(int first, int second) Proveďte bitovou kopii OR prvního a druhého (první | sekundu).Perform a bitwise OR on the first and second (first | second).
int BitwiseAnd (int First, int Second)int BitwiseAnd(int first, int second) Proveďte bitovou kopii AND prvního a druhého (první & sekundu).Perform a bitwise AND on the first and second (first & second).
int BitwiseXor (int First, int Second)int BitwiseXor(int first, int second) Proveďte bitovou kopii XOR prvního a druhého (prvních ^ sekund).Perform a bitwise XOR on the first and second (first ^ second).
int BitwiseNot (int First)int BitwiseNot(int first) Proveďte bitovou NOT (~ First).Perform a bitwise NOT (~first).
bool IsOsPlatform (String platformString)bool IsOsPlatform(string platformString) Určete, zda je aktuální platforma operačního systému platformString .Specify whether the current OS platform is platformString. platformString musí být členem OSPlatform .platformString must be a member of OSPlatform.
bool IsOSUnixLike ()bool IsOSUnixLike() True, pokud je aktuální operační systém systémem UNIX.True if current OS is a Unix system.
String NormalizePath (cesta k parametrům řetězec [])string NormalizePath(params string[] path) Získá kanonickou úplnou cestu k zadané cestě a zajistí, že obsahuje správné znaky oddělovače adresáře pro aktuální operační systém.Gets the canonicalized full path of the provided path and ensures it contains the correct directory separator characters for the current operating system.
String NormalizeDirectory (cesta k parametrům řetězec [])string NormalizeDirectory(params string[] path) Získá kanonickou úplnou cestu k zadanému adresáři a zajistí, že obsahuje správné znaky oddělovačů adresářů pro aktuální operační systém a zároveň zajišťuje, že má koncové lomítko.Gets the canonicalized full path of the provided directory and ensures it contains the correct directory separator characters for the current operating system while ensuring it has a trailing slash.
EnsureTrailingSlash řetězce (cesta k řetězci)string EnsureTrailingSlash(string path) Pokud daná cesta nemá koncové lomítko, pak ji přidejte.If the given path doesn't have a trailing slash then add one. Pokud je cesta prázdným řetězcem, neupraví ho.If the path is an empty string, does not modify it.
String GetPathOfFileAbove (soubor řetězce; String startingDirectory)string GetPathOfFileAbove(string file, string startingDirectory) Vyhledá a vrátí úplnou cestu k souboru ve struktuře adresáře nad aktuálním umístěním souboru buildu nebo podle startingDirectory toho, jestli je zadaný.Searches for and returns the full path to a file in the directory structure above the current build file's location, or based on startingDirectory, if specified.
GetDirectoryNameOfFileAbove (řetězec startingDirectory, název souboru String)GetDirectoryNameOfFileAbove(string startingDirectory, string fileName) Vyhledejte a vraťte adresář se souborem buď v zadaném adresáři, nebo v umístění ve struktuře adresáře nad adresářem.Locate and return the directory of a file in either the directory specified or a location in the directory structure above that directory.
String MakeRelative (řetězec basePath, cesta k řetězci)string MakeRelative(string basePath, string path) Vytváří path relativní vzhledem k basePath .Makes path relative to basePath. basePath musí být absolutní adresář.basePath must be an absolute directory. Pokud path nejde provést relativní, vrátí se do stejného znění.If path cannot be made relative, it is returned verbatim. Podobně jako Uri.MakeRelativeUri .Similar to Uri.MakeRelativeUri.
String ValueOrDefault (řetězec conditionValue, hodnota defaultValue řetězce)string ValueOrDefault(string conditionValue, string defaultValue) Vrátí řetězec v parametru defaultValue pouze v případě, že parametr conditionValue je prázdný, v opačném případě vrátí hodnotu conditionValue.Return the string in parameter 'defaultValue' only if parameter 'conditionValue' is empty, else, return the value conditionValue.

Vnořené funkce vlastnostíNested property functions

Můžete zkombinovat funkce vlastností a vytvořit tak složitější funkce, jak ukazuje následující příklad.You can combine property functions to form more complex functions, as the following example shows.

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

Tento příklad vrátí hodnotu FileAttributes Archive bitu (32 nebo 0) souboru daného cestou tempFile .This example returns the value of the FileAttributesArchive bit (32 or 0) of the file given by the path tempFile. Všimněte si, že hodnoty výčtu dat nemohou být v rámci funkcí vlastností uvedeny podle názvu.Notice that enumerated data values cannot appear by name within property functions. Místo toho je třeba použít číselnou hodnotu (32).The numeric value (32) must be used instead.

Metadata se můžou objevit i ve funkcích vnořených vlastností.Metadata may also appear in nested property functions. Další informace najdete v tématu dávkování.For more information, see Batching.

DoesTaskHostExist nástroje MSBuildMSBuild DoesTaskHostExist

DoesTaskHostExistFunkce Property v nástroji MSBuild vrátí, zda je hostitel úlohy aktuálně nainstalován pro zadané hodnoty modulu runtime a architektury.The DoesTaskHostExist property function in MSBuild returns whether a task host is currently installed for the specified runtime and architecture values.

Tato funkce vlastnosti má následující syntaxi:This property function has the following syntax:

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

EnsureTrailingSlash nástroje MSBuildMSBuild EnsureTrailingSlash

EnsureTrailingSlashFunkce Property v MSBuild přidá koncové lomítko, pokud ještě neexistuje.The EnsureTrailingSlash property function in MSBuild adds a trailing slash if one doesn't already exist.

Tato funkce vlastnosti má následující syntaxi:This property function has the following syntax:

$([MSBuild]::EnsureTrailingSlash('$(PathProperty)'))

GetDirectoryNameOfFileAbove nástroje MSBuildMSBuild GetDirectoryNameOfFileAbove

Funkce MSBuild GetDirectoryNameOfFileAbove Property vyhledá soubor v adresářích nad aktuální adresář v cestě.The MSBuild GetDirectoryNameOfFileAbove property function looks for a file in the directories above the current directory in the path.

Tato funkce vlastnosti má následující syntaxi:This property function has the following syntax:

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

Následující kód je příkladem této syntaxe.The following code is an example of this syntax.

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

GetPathOfFileAbove nástroje MSBuildMSBuild GetPathOfFileAbove

GetPathOfFileAboveFunkce Property v MSBuild vrátí cestu k zadanému souboru, pokud se nachází ve struktuře adresáře nad aktuálním adresářem.The GetPathOfFileAbove property function in MSBuild returns the path of the specified file, if located in the directory structure above the current directory. Je funkčně ekvivalentní voláníIt is functionally equivalent to calling

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

Tato funkce vlastnosti má následující syntaxi:This property function has the following syntax:

$([MSBuild]::GetPathOfFileAbove(dir.props))

GetRegistryValue nástroje MSBuildMSBuild GetRegistryValue

GetRegistryValueFunkce vlastnosti MSBuild vrací hodnotu klíče registru.The MSBuild GetRegistryValue property function returns the value of a registry key. Tato funkce přijímá dva argumenty, název klíče a název hodnoty a vrací hodnotu z registru.This function takes two arguments, the key name and the value name, and returns the value from the registry. Pokud nezadáte název hodnoty, vrátí se výchozí hodnota.If you don't specify a value name, the default value is returned.

Následující příklady ukazují, jak se tato funkce používá:The following examples show how this function is used:

$([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 nástroje MSBuildMSBuild GetRegistryValueFromView

GetRegistryValueFromViewFunkce vlastnosti MSBuild získá data systémového registru podle klíče registru, hodnoty a jednoho nebo více seřazených zobrazení registru.The MSBuild GetRegistryValueFromView property function gets system registry data given the registry key, value, and one or more ordered registry views. Klíč a hodnota jsou prohledány v každém zobrazení registru v pořadí, dokud nebudou nalezeny.The key and value are searched in each registry view in order until they are found.

Syntaxe pro tuto funkci vlastnosti je:The syntax for this property function is:

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

Operační systém Windows 64 udržuje HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node klíč registru, který nabízí HKEY_LOCAL_MACHINE\SOFTWARE registru pro 32 aplikace.The Windows 64-bit operating system maintains a HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node registry key that presents a HKEY_LOCAL_MACHINE\SOFTWARE registry view for 32-bit applications.

Ve výchozím nastavení 32 aplikace spuštěná v WOW64 přistupuje ke 32 zobrazení registru a aplikace 64-bit 64 přistupuje k zobrazení 16bitového registru.By default, a 32-bit application running on WOW64 accesses the 32-bit registry view and a 64-bit application accesses the 64-bit registry view.

K dispozici jsou následující zobrazení registru:The following registry views are available:

Zobrazení registruRegistry view DefiniceDefinition
Zadaná RegistryView. Registry32RegistryView.Registry32 Zobrazení registru pro 32 bitových aplikací.The 32-bit application registry view.
Zadaná RegistryView. Registry64RegistryView.Registry64 Zobrazení registru pro 64 bitových aplikací.The 64-bit application registry view.
Zadaná RegistryView. DefaultRegistryView.Default Zobrazení registru, které odpovídá procesu, ve kterém je aplikace spuštěná.The registry view that matches the process that the application is running on.

Následuje příklad.The following is an example.

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

Získá SLRuntimeInstallPath data ReferenceAssemblies klíče, hledá se nejprve v zobrazení registru 64 a potom v zobrazení registru 32.gets the SLRuntimeInstallPath data of the ReferenceAssemblies key, looking first in the 64-bit registry view and then in the 32-bit registry view.

MakeRelative nástroje MSBuildMSBuild MakeRelative

Funkce MSBuild MakeRelative Property vrátí relativní cestu druhé cesty vzhledem k první cestě.The MSBuild MakeRelative property function returns the relative path of the second path relative to first path. Každá cesta může být soubor nebo složka.Each path can be a file or folder.

Tato funkce vlastnosti má následující syntaxi:This property function has the following syntax:

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

Následující kód je příkladem této syntaxe.The following code is an example of this syntax.

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

ValueOrDefault nástroje MSBuildMSBuild ValueOrDefault

Funkce MSBuild ValueOrDefault Property vrátí první argument, pokud není null nebo prázdný.The MSBuild ValueOrDefault property function returns the first argument, unless it's null or empty. Pokud má první argument hodnotu null nebo je prázdný, funkce vrátí druhý argument.If the first argument is null or empty, the function returns the second argument.

Následující příklad ukazuje, jak je tato funkce použita.The following example shows how this function is used.

<Project ToolsVersion="4.0" xmlns="http://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
-->

Funkce MSBuild TargetFramework a TargetPlatformMSBuild TargetFramework and TargetPlatform functions

Nástroj MSBuild definuje několik funkcí pro zpracování vlastností targetFramework a TargetPlatform.MSBuild defines several functions for handling TargetFramework and TargetPlatform properties.

Signatura funkceFunction signature DescriptionDescription
GetTargetFrameworkIdentifier (String targetFramework)GetTargetFrameworkIdentifier(string targetFramework) Analyzujte TargetFrameworkIdentifier z hodnoty TargetFramework.Parse the TargetFrameworkIdentifier from the TargetFramework.
GetTargetFrameworkVersion (String targetFramework)GetTargetFrameworkVersion(string targetFramework) Analyzujte TargetFrameworkVersion z hodnoty TargetFramework.Parse the TargetFrameworkVersion from the TargetFramework.
GetTargetPlatformIdentifier (String targetFramework)GetTargetPlatformIdentifier(string targetFramework) Analyzujte TargetPlatformIdentifier z hodnoty TargetFramework.Parse the TargetPlatformIdentifier from the TargetFramework.
GetTargetPlatformVersion (String targetFramework)GetTargetPlatformVersion(string targetFramework) Analyzujte TargetPlatformVersion z hodnoty TargetFramework.Parse the TargetPlatformVersion from the TargetFramework.
IsTargetFrameworkCompatible (String targetFrameworkTarget; String targetFrameworkCandidate)IsTargetFrameworkCompatible(string targetFrameworkTarget, string targetFrameworkCandidate) Vrátí hodnotu true, pokud je cílový rámec kandidáta kompatibilní s touto cílovou architekturou a jinak false.Return 'True' if the candidate target framework is compatible with this target framework and false otherwise.

Následující příklad ukazuje, jak jsou tyto funkce použity.The following example shows how these functions are used.

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

    <PropertyGroup>
        <Value1>$([MSBuild]::GetTargetFrameworkIdentifier('net5.0-windows7.0'))</Value1>
        <Value2>$([MSBuild]::GetTargetFrameworkVersion('net5.0-windows7.0'))</Value2>
        <Value3>$([MSBuild]::GetTargetPlatformIdentifier('net5.0-windows7.0'))</Value3>
        <Value4>$([MSBuild]::GetTargetPlatformVersion('net5.0-windows7.0'))</Value4>
        <Value5>$([MSBuild]::IsTargetFrameworkCompatible('net5.0-windows', 'net5.0'))</Value5>
    </PropertyGroup>

    <Target Name="MyTarget">
        <Message Text="Value1 = $(Value1)" />
        <Message Text="Value2 = $(Value2)" />
        <Message Text="Value3 = $(Value3)" />
        <Message Text="Value4 = $(Value4)" />
        <Message Text="Value5 = $(Value5)" />
    </Target>
</Project>
Value1 = .NETCoreApp
Value2 = 5.0
Value3 = windows
Value4 = 7.0
Value5 = True

Funkce podmínky nástroje MSBuildMSBuild condition functions

Funkce Exists a HasTrailingSlash nejsou funkcemi vlastností.The functions Exists and HasTrailingSlash are not property functions. Jsou k dispozici pro použití s Condition atributem.They are available for use with the Condition attribute. Viz podmínky nástroje MSBuild.See MSBuild conditions.

Viz takéSee also