Функции свойств
В версиях 4 и 4.5 платформы .NET Framework можно оценивать скрипты MSBuild с помощью функции свойства. Функции свойства можно использовать во всех случаях, где появляются свойства. В отличие от задач, функции свойства можно использовать за пределами целей и оценивать до запуска целей.
Без использования задач MSBuild вы можете читать системное время, сравнивать строки, сопоставлять регулярные выражения и выполнять другие действия в скрипте построения. MSBuild попытается преобразовать строку в число и число в строку и при необходимости выполнит другие преобразования.
Содержание раздела
Property Function Syntax
String Property Functions
Static Property Functions
Calling Instance Methods on Static Properties
MSBuild Property Functions
Nested Property Functions
MSBuild DoesTaskHostExist
MSBuild GetDirectoryNameOfFileAbove
MSBuild GetRegistryValue
MSBuild GetRegistryValueFromView
MSBuild MakeRelative
MSBuild ValueOrDefault
Синтаксис функции свойства
Существуют три типа функций свойства, каждая из которых имеет свой синтаксис.
Функции свойства строки (экземпляра)
Функции статичного свойства
Функции свойства MSBuild
Функции свойства строки
Все значения свойства построения являются значениями строки. Для управления значением свойства можно использовать методы строки (экземпляра). Например, можно извлечь имя диска (первые три символа) из свойства построения, которое представляет собой полный путь, с помощью следующего кода.
$(ProjectOutputFolder.Substring(0,3))
Функции статичного свойства
В скрипте построения можно получить доступ к статическим свойствам и методам многих системных классов. Чтобы получить значение статического свойства используйте синтаксис, где Класс — это имя системного класса, а Свойство — это имя свойства.
$([Class]::Property)
Например, чтобы задать свойство построения на текущую дату и время, можно использовать следующий код.
<Today>$([System.DateTime]::Now)</Today>
Чтобы вызвать статический метод, используйте следующий синтаксис, где Класс — это имя системного класса, Метод — это имя метода, а (Параметры) — это список параметров метода.
$([Class]::Method(Parameters))
Например, чтобы задать свойство построения на новый GUID, можно использовать следующий скрипт.
<NewGuid>$([System.Guid]::NewGuid())</NewGuid>
В функциях статического свойства можно использовать любой статический метод или свойство следующих системных классов.
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
Кроме этого, можно использовать следующие статические методы и свойства.
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
Вызов методов экземпляра на статических свойствах
При доступе к статическому свойству, которое возвращает экземпляр объектов, можно вызывать методы экземпляра этого объекта. Чтобы вызвать метод экземпляра, используйте следующий синтаксис, где Класс — это имя системного класса, Свойство — это имя свойства, Метод — это имя метода, а (Параметры) — это список параметров метода.
$([Class]::Property.Method(Parameters))
Имя класса должно содержать полное пространство имен.
Например, чтобы задать свойство построения на текущую дату, можно использовать следующий код.
<Today>$([System.DateTime]::Now.ToString("yyyy.MM.dd"))</Today>
Функции свойства MSBuild
Для обеспечения арифметической побитовой логической поддержки escape-символов можно использовать несколько статических методов из вашего построения. Получить доступ к этим методам можно с помощью следующего синтаксиса, где Метод — это имя метода, а Параметры — это список параметров метода.
$([MSBuild]::Method(Parameters))
Например, чтобы добавить два свойства с числовыми значениями, используйте следующий код.
$([MSBuild]::Add($(NumberOne), $(NumberTwo))
Приведем список функций свойства MSBuild.
Подпись функции |
Описание |
---|---|
Сложение double(double a, double b) |
Сложение двух значений double. |
Сложение long(long a, long b) |
Сложение двух значений long. |
Вычитание double(double a, double b) |
Вычитание двух значений double. |
Вычитание long(long a, long b) |
Вычитание двух значений long. |
Умножение double(double a, double b) |
Умножение двух значений double. |
Умножение long(long a, long b) |
Умножение двух значений long. |
Деление double(double a, double b) |
Деление двух значений double. |
Деление long(long a, long b) |
Деление двух значений long. |
Остаток от деления double (double a, double b) |
Остаток от деления двух значений double. |
Остаток от деления long(long a, long b) |
Остаток от деления двух значений long. |
строка Escape (строка не экранируется) |
Escape-последовательность строки в соответствии с правилами экранирования MSBuild. |
строка Unescape (строка экранируется) |
Unescape-последовательность строки в соответствии с правилами экранирования MSBuild. |
Целое значение BitwiseOr(первое целое значение, второе целое значение) |
Примените побитовый параметр OR к первому и второму значению (первое | второе). |
Целое значение BitwiseAnd(первое целое значение, второе целое значение) |
Примените побитовый параметр AND к первому и второму значению (первое & второе). |
Целое значение BitwiseXor(первое целое значение, второе целое значение) |
Примените побитовый параметр XOR к первому и второму значению (первое ^ второе). |
Целое значение BitwiseNot(первое целое значение) |
Примените побитовый параметр NOT (~первое значение). |
Вложенные функции свойства
Функции свойства можно объединять для формирования более сложных функций, как показано в следующем примере.
$([MSBuild]::BitwiseAnd(32, $([System.IO.File]::GetAttributes(tempFile))))
В этом примере возвращается значение FileAttributes Archive бит (32 или 0) файла, указанного в пути tempFile. Обратите внимание, что значения перечисляемых данных не могут отображаться в функциях свойства по имени. Вместо этого необходимо использовать числовое значение (32).
Во вложенных функциях свойства могут также появляться метаданные. Для получения дополнительной информации см. Пакетная обработка в MSBuild.
MSBuild DoesTaskHostExist
Функция свойства DoesTaskHostExist в MSBuild возвращает сведения об установленном сервере задач для указанной среды выполнения и значение архитектуры.
Эта функция свойства использует следующий синтаксис.
$[MSBuild]::DoesTaskHostExist(string theRuntime, string theArchitecture)
MSBuild GetDirectoryNameOfFileAbove
Функция свойства GetDirectoryNameOfFileAbove в MSBuild выполняет поиск файла в каталогах выше текущего каталога в пути.
Эта функция свойства использует следующий синтаксис.
$[MSBuild]::GetDirectoryNameOfFileAbove(string ThePath, string TheFile)
В следующем коде показан пример этого синтаксиса.
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))\EnlistmentInfo.props" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))' != '' " />
MSBuild GetRegistryValue
Функция свойства GetRegistryValue в MSBuild возвращает значение раздела реестра. Она принимает два аргумента — имя раздела и имя значения — и возвращает значение в реестр. Если не указано имя значения, возвращается значение по умолчанию.
В следующих примерах показано, как используется эта функция.
$([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
Функция свойства GetRegistryValueFromView в MSBuild получает данные системного реестра с учетом раздела реестра, значения и одного или нескольких упорядоченных представлений реестра. Раздел и значения ищутся в каждом представлении реестра по порядку, пока не будут найдены.
Синтаксис функции свойства.
[MSBuild]::GetRegistryValueFromView(string keyName, string valueName, object defaultValue, params object[] views)
64-разрядная операционная система Windows ведет раздел реестра HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node, содержащий представление реестра HKEY_LOCAL_MACHINE\SOFTWARE для 32-разрядных приложений.
По умолчанию 32-разрядное приложение, работающее на WOW64, получает доступ к 32-разрядному представлению реестра, а 64-разрядное приложение — к 64-разрядному представлению реестра.
Доступны следующие представления реестра.
Представление реестра |
Определение |
---|---|
RegistryView.Registry32 |
Представление реестра для 32-разрядного приложения. |
RegistryView.Registry64 |
Представление реестра для 64-разрядного приложения. |
RegistryView.Default |
Представление реестра, совпадающее с процессом, на котором работает приложение. |
Пример.
$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Silverlight\v3.0\ReferenceAssemblies', 'SLRuntimeInstallPath', null, RegistryView.Registry64, RegistryView.Registry32))
Получение данных SLRuntimeInstallPath из раздела ReferenceAssemblies, поиск сначала в 64-разрядном, а затем в 32-разрядном представлении реестра.
MSBuild MakeRelative
Функция свойства MakeRelative в MSBuild возвращает путь второго пути относительно первого пути. Каждый путь может быть файлом или папкой.
Эта функция свойства использует следующий синтаксис.
$[MSBuild]::MakeRelative($(FileOrFolderPath1), $(FileOrFolderPath2))
В следующем коде показан пример этого синтаксиса.
<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
Функция свойства ValueOrDefault в MSBuild возвращает первый аргумент, если он не нулевой или пустой. Если первый аргумент нулевой, функция возвращает второй аргумент.
В следующем примере показано, как используется эта функция.
<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
-->