Поделиться через


Функции свойств

В платформе .NET Framework версий 4 и 4,5, функции свойств можно использовать для оценки скрипты MSBuild.Функции свойств можно применять при каждом появлении свойств.В отличие от задач, функции свойств можно использовать вне конечных объектов, их оценка выполняется до выполнения какого-либо целевого объекта.

С помощью скриптов построения можно считывать системное время, сравнивать строки, вести поиск по регулярным выражениям и выполнять другие действия, не используя задачи MSBuild.MSBuild осуществит попытку преобразования строки в число и числа в строку, а также другие необходимые преобразования.

Содержание раздела

  • Синтаксис функции свойств

    • Функции свойств строки

    • Функции статических свойств

    • Вызов методов экземпляра для статических свойств

    • Функции свойств MSBuild

  • Функции вложенных свойств

  • MSBuild DoesTaskHostExist

  • MSBuild GetDirectoryNameOfFileAbove

  • MSBuild GetRegistryValue

  • MSBuild GetRegistryValueFromView

  • MSBuild MakeRelative

  • MSBuild ValueOrDefault

Синтаксис функции свойств

Ниже представлены три вида функций свойств. У каждой функции свой синтаксис:

  • Функции свойств строки (экземпляра)

  • Функции статических свойств

  • Функции свойств MSBuild

Dd633440.collapse_all(ru-ru,VS.110).gifФункции свойств строки

Все значения свойств построения являются строковыми.Для работы с любым значением свойства можно использовать методы строк (экземпляра).Например, можно извлечь имя диска (первые три символа) из свойства построения, представляющего полный путь, с помощью следующего кода:

$(ProjectOutputFolder.Substring(0,3))

Dd633440.collapse_all(ru-ru,VS.110).gifФункции статических свойств

В скрипте построения можно получить доступ к статическим свойствам и методам многих системных классов.Чтобы получить значение статического свойства, используйте следующий синтаксис, где Class — это имя системного класса, а Property — имя свойства.

$([Class]::Property)

Например, с помощью следующего кода можно задать для свойства построения текущую дату и время.

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

Чтобы вызвать статический метод, следует использовать следующий синтаксис, где Class — это имя системного класса, Method — имя метода, а (Parameters) — список параметров для метода:

$([Class]::Member(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

Dd633440.collapse_all(ru-ru,VS.110).gifВызов методов экземпляра для статических свойств

Если получен доступ к статическому свойству, возвращающему экземпляр объекта, можно вызвать методы экземпляра этого объекта.Чтобы вызвать метод экземпляра, следует использовать следующий синтаксис, где Class — это имя системного класса, Property — имя свойства, Method — имя метода, а (Parameters) — список параметров для метода:

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

Имя класса должно полностью соответствовать пространству имен.

Например, с помощью следующего кода можно задать для свойства построения сегодняшнюю дату.

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

Dd633440.collapse_all(ru-ru,VS.110).gifФункции свойств MSBuild

С помощью некоторых статических методов в имеющемся построении можно обеспечить поддержку арифметических и побитовых логических операций, а также поддержку escape-символа.Этими методами можно воспользоваться с помощью следующего синтаксиса, где Method — это имя метода, а Parameters — список параметров для метода.

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

Например, чтобы сложить два свойства с числовыми значениями, следует использовать следующий код.

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

Ниже представлен список функций свойств MSBuild:

Сигнатура функции

Описание

double Add(double a, double b)

Прибавление двух значений double.

long Add(long a, long b)

Прибавление двух значений long.

double Subtract(double a, double b)

Вычитание двух значений double.

long Subtract(long a, long b)

Вычитание двух значений long.

double Multiply(double a, double b)

Умножение двух значений double.

long Multiply(long a, long b)

Умножение двух значений long.

double Divide(double a, double b)

Деление двух значений double.

long Divide(long a, long b)

Деление двух значений long.

double Modulo(double a, double b)

Остаток от деления двух значений double.

long Modulo(long a, long b)

Остаток от деления двух значений long.

string Escape(string unescaped)

Добавление escape-значений для строки в соответствии с правилами добавления escape-значений MSBuild.

string Unescape(string escaped)

Удаление escape-значений для строки в соответствии с правилами удаления escape-значений MSBuild.

int BitwiseOr(int first, int second)

Выполнение побитового оператора OR для значений first и second (first | second).

int BitwiseAnd(int first, int second)

Выполнение побитового оператора AND для значений first и second (first & second).

int BitwiseXor(int first, int second)

Выполнение побитового оператора XOR для значений first и second (first ^ second).

int BitwiseNot(int first)

Выполнение побитового оператора NOT (~first).

Функции вложенных свойств

Можно сочетать функции свойств для формирования более сложных функций, как показано в следующем примере.

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

Этот пример возвращает значение бита FileAttributesArchive (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 возвращает значение ключа реестра.Эта функция принимает 2 аргумента имя ключа и имя значения и возвращает значение из реестра.Если имя не указано, то значения по умолчанию.

В следующих примерах показан способ использования этой функции:

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

Функции свойств MSBuild MakeRelative возвращает относительный путь второго пути относительно первого пути.Каждый путь может быть файлом или папкой.

Эта функция свойства имеет следующий синтаксис:

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

Функции свойств MSBuild ValueOrDefault возвращает первый аргумент, если она не будет значение null или является пустой.Если первый аргумент имеет значение null или является пустым, то функция вернет второй аргумент.

В следующем примере показано, как эта функция используется.

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

См. также

Основные понятия

Свойства MSBuild

Другие ресурсы

MSBuild