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


Функции элементов

Начиная с MSBuild 4.0, код в задачах и целях может вызывать функции элементов для получения сведений об элементах проекта. Эти функции упрощают получение элементов Distinct() и занимают меньше времени, чем циклический просмотр всех элементов.

Функции элементов строки

Можно использовать методы и свойства строки в платформе .NET Framework позволяет работать с переданным ей значение элемента. Для методов String укажите имя метода. Для свойств String укажите имя свойства после "get_".

Для элементов, имеющих несколько строк, метод строки или выполнения свойства на каждой строке.

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

<ItemGroup>
    <theItem Include="andromeda;tadpole;cartwheel" />
</ItemGroup>

<Target Name = "go">
    <Message Text="IndexOf  @(theItem->IndexOf('r'))" />
    <Message Text="Replace  @(theItem->Replace('tadpole', 'pinwheel'))" />
    <Message Text="Length   @(theItem->get_Length())" />
    <Message Text="Chars    @(theItem->get_Chars(2))" />
</Target>

  <!--
  Output:
    IndexOf  3;-1;2
    Replace  andromeda;pinwheel;cartwheel
    Length   9;7;9
    Chars    d;d;r
  -->

Встроенные функции элементов

Встроенные функции, доступные для элементов, перечислены в таблице ниже.

Функция

Пример

Описание

Count

@(MyItem->Count())

Возвращает количество элементов.

DirectoryName

@(MyItem->DirectoryName())

Возвращает количество Path.DirectoryName для каждого элемента.

Distinct

@(MyItem->Distinct())

Возвращает элементы, имеющие различные значения Include. Метаданные игнорируются. При сравнении регистр не учитывается.

DistinctWithCase

@(MyItem->DistinctWithCase())

Возвращает элементы, имеющие различные значения itemspec. Метаданные игнорируются. При сравнении учитывается регистр.

Reverse

@(MyItem->Reverse())

Возвращает порядок элементов в обратном порядке.

AnyHaveMetadataValue

@(MyItem->AnyHaveMetadataValue("MetadataName", "MetadataValue"))

Возвращает boolean, указывающее, имеет ли какой-либо элемент заданного метаданные имя и значение. При сравнении регистр не учитывается.

ClearMetadata

@(MyItem->ClearMetadata())

Возвращает элементы с их очищенные метаданные. Только itemspec сохранятьо.

HasMetadata

@(MyItem->HasMetadataValue("MetadataName")

Возвращает элементы, имеющие заданное имя метаданных. При сравнении регистр не учитывается.

Metadata

@(MyItem->Metadata("MetadataName"))

Возвращает значения метаданных, которые имеют имя метаданных.

WithMetadataValue

@(MyItem->WithMetadataValue("MetadataName", "MetadataValue")

Возвращает элементы с заданными метаданными имя и значение. При сравнении регистр не учитывается.

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

<ItemGroup>
    <TheItem Include="first">
        <Plant>geranium</Plant>
    </TheItem>
    <TheItem Include="second">
        <Plant>algae</Plant>
    </TheItem>
    <TheItem Include="third">
        <Plant>geranium</Plant>
    </TheItem>
</ItemGroup>

<Target Name="go">
    <Message Text="MetaData:    @(TheItem->Metadata('Plant'))" />
    <Message Text="HasMetadata: @(theItem->HasMetadata('Plant'))" />
    <Message Text="WithMetadataValue: @(TheItem->WithMetadataValue('Plant', 'geranium'))" />
    <Message Text=" " />
    <Message Text="Count:   @(theItem->Count())" />
    <Message Text="Reverse: @(theItem->Reverse())" />
</Target>

  <!-- 
  Output:
    MetaData:    geranium;algae;geranium
    HasMetadata: first;second;third
    WithMetadataValue: first;third
   
    Count:   3
    Reverse: third;second;first
  -->

См. также

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

Элементы MSBuild