項目とプロパティを操作する新しいメソッド (MSBuild)

更新 : 2007 年 11 月

MSBuild 3.5 では、以下の操作を実行できるようになりました。

  • プロジェクト内のすべての項目に適用されるメタデータを含む項目定義グループを定義する。

  • プロパティ、項目、および項目メタデータの作成、削除、結合、および変更を動的に項目グループに対して直接行う。これによって、CreateItem タスクや CreateProperty タスクを使用する必要がなくなります。

項目定義グループ

ItemDefinitionGroup 要素では、既定でプロジェクト内のすべての項目に適用されるメタデータ値である一連の項目定義を定義できます。詳細については、「項目定義」を参照してください。

項目グループ内のメタデータの動的な調整

MSBuild では、ItemGroup 要素 (MSBuild)PropertyGroup 要素 (MSBuild) を使用して項目やプロパティを静的に宣言します。MSBuild 2.0 では、ビルド中にプロパティや項目を作成または変更する場合、CreateItem タスクまたは CreateProperty タスクを使用することが必要でした。このプロセスは使いにくく、動的な更新も完全にはサポートしていませんでした。それに対し、MSBuild 3.5 では、プロパティ、項目、および項目メタデータの作成、削除、結合、および変更を動的に項目グループに対して直接行うことができます。

以下の例を比較してください。例 1 は、CreateItem タスクを使用してタスク パラメータを追加する方法とメタデータを含む項目リストを作成する方法を示しています。例 2 は、メタデータを ItemGroup に直接追加するという新しい方法を示しています。

例 1 : CreateItem タスクを使用してタスク パラメータを追加する簡単な例。最初のターゲットは、CreateItem タスクを使用して CultureResource という新しい項目リストを動的に作成します。2 つ目のターゲットは、元のリスト内のすべての Culture リソースに TargetDirectory という新しいメタデータを追加します。

<Target Name="GenerateBeforeCompile">
     <CreateItem Include="SomeGeneratedCode.cs">
        <Output TaskParameter="Include" ItemName="Compile" /> 
    </CreateItem>
</Target>

<Target Name="ProcessCultureResources">
    <CreateItem Include="@(EmbeddedResource)" 
      Condition="'%(Culture)' != ''"
      AdditionalMetadata="TargetDirectory=%
      (EmbeddedResource.Culture)">
    <Output TaskParameter="Include" ItemName="CultureResource" />
    </CreateItem>
</Target>

例 2 : パラメータとメタデータを直接 ItemGroup に追加することにより、前の例と同じ操作を行うことができます。

<Target Name="GenerateBeforeCompile">
     <ItemGroup>
        <Compile Include="SomeGeneratedCode.cs" />
    </ItemGroup>
 </Target>
 
<Target Name="ProcessCultureResources">
    <ItemGroup>
        <CultureResource Include="@(EmbeddedResource)"
          Condition="'%(EmbeddedResource.Culture)' != ''">
             <TargetDirectory>%(EmbeddedResource.Culture) </TargetDirectory>
        </CultureResource>
    </ItemGroup>
</Target>

項目の削除

MSBuild の以前のバージョンでは、リストから項目を削除する場合は新しいリストを作成し直すことが必要でした。現在のバージョンでは、次の例に示すように、新たに追加された Remove パラメータを使用して項目を直接削除することができます。

<ItemGroup>
    <!—Remove *.licx from the EmbeddedResource list - ->
    <EmbeddedResource Remove="*.licx" />
 
    <!—Or remove items in @(licx) from EmbeddedResource list -- >
    <EmbeddedResource Remove="@(licx)" />
</ItemGroup>

参照

概念

MSBuild プロジェクト ファイル スキーマ リファレンス

その他の技術情報

MSBuild の概念