项函数

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