MSBuild 項目
更新 : 2007 年 11 月
項目とはビルド システムへの入力を表すものです。ユーザー定義のコレクション名に基づき、項目のコレクションとしてグループ化されます。コレクション内の個々の項目は、ビルド プロセスの各ステップを実行するタスクによって使用されます。項目のコレクションを、タスクのパラメータとして使用できます。
プロジェクト ファイルでの項目の作成
項目は、そのコレクション名を名前に持つ要素を、ItemGroup 要素の子として作成することにより、プロジェクト ファイルで宣言します。要素の Include 属性は、その項目のコレクションに含めるファイルを指定します。たとえば、次のコードでは、2 つのファイルをインクルードする Compile という名前の項目のコレクションを作成しています。
<ItemGroup>
<Compile Include = "file1.cs"/>
<Compile Include = "file2.cs"/>
</ItemGroup>
次のコードでは、両方のファイルをセミコロンで区切って 1 つの Include 属性で宣言することで、同じ項目のコレクションを作成しています。
<ItemGroup>
<Compile Include = "file1.cs;file2.cs"/>
</ItemGroup>
プロジェクト ファイルでの項目の参照
プロジェクト ファイルで項目のコレクションを参照するには、@(ItemCollectionName) という構文を使用します。たとえば、上記の例で項目のコレクションを参照するには、@(Compile) のようにします。この構文を使用すると、項目のコレクションをそのタスクのパラメータとして指定して、項目のコレクションをタスクに渡すことができます。詳細については、「方法 : ワイルドカードを使用してディレクトリ内のすべてのファイルをビルドする」を参照してください。
既定では、項目のコレクション内の項目は、展開するとセミコロン (;) で区切られます。構文 @(ItemCollectionName, 'separator) を使用して、既定以外の区切り文字を指定します。詳細については、「方法 : 項目のコレクションをコンマ区切りで表示する」を参照してください。
ワイルドカードの使用による項目の指定
**、*、および ? ワイルドカードを使用すると、各ファイルを個別にリストする代わりに、ファイルのグループをビルドの入力として指定できます。たとえば、同じディレクトリ内にあるすべての .cs ファイルまたは .vb ファイルをプロジェクト ファイルとして指定するには、プロジェクト ファイルで次のいずれかの要素を使用します。
<CSFile Include="*.cs"/>
または
<VBFile Include="*.vb"/>
メモ : |
---|
ワイルドカードは、ビルドの入力を指定する項目でのみ使用できます。たとえば、Csc タスクで Sources パラメータへの入力を指定するのに、ワイルドカードを使用することはできません。MSBuild は、ワイルドカードをパラメータ値として受け入れますが、それらを評価せずに、リテラル文字列として扱います。次の例では、リテラル文字列 *.cs を Sources パラメータ値として使用します。 |
<Target Name="Compile">
<CSC Sources="*.cs" />
</Target>
ワイルドカードの詳細については、「方法 : ワイルドカードを使用してディレクトリ内のすべてのファイルをビルドする」を参照してください。
Exclude 属性の使用
項目には、Exclude 属性も含めることができます。この属性は、特定のファイルを項目のコレクションから除外します。Exclude 属性はワイルドカードと共に使用すると便利です。たとえば、次のコードは、ディレクトリ内の DoNotBuild.cs ファイルを除くすべての .cs ファイルを追加します。
<ItemGroup>
<CSFile
Include="*.cs"
Exclude="DoNotBuild.cs"/>
</ItemGroup>
詳細については、「方法 : ディレクトリ内の特定の 1 ファイルを除くすべてのファイルをビルドする」を参照してください。
アイテム メタデータ
項目には、Include および Exclude 属性から収集した情報に加えて、メタデータが含まれます。このメタデータは、項目に関する詳細情報を必要とするタスクが使用したり、タスクおよびターゲットのバッチ処理に使用できます。バッチ処理の詳細については、「MSBuild バッチ」を参照してください。
アイテム メタデータは、そのメタデータ名を名前に持つ要素を、項目の子として作成することにより、プロジェクト ファイルで宣言します。項目には 0 以上のメタデータ値を指定できます。たとえば、次の要素には、値 Fr の Culture メタデータがあります。
<ItemGroup>
<CSFile Include="main.cs">
<Culture>Fr</Culture>
</CSFile>
</ItemGroup>
プロジェクト ファイルでのアイテム メタデータの参照
プロジェクト ファイルでアイテム メタデータを参照するには、%(ItemMetadataName) という構文を使用します。あいまいさが存在する場合、これは %(ItemCollectionName.ItemMetaDataName) のように項目のコレクションの名前で修飾されます。次の例では、Display メタデータを使用して、Message タスクをバッチ処理します。バッチでのアイテム メタデータの使い方の詳細については、「方法 : アイテム メタデータを使用してタスクを一度に処理する」を参照してください。
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Stuff Include="One.cs" >
<Display>false</Display>
</Stuff>
<Stuff Include="Two.cs">
<Display>true</Display>
</Stuff>
</ItemGroup>
<Target Name="Batching">
<Message Text="@(Stuff)" Condition=" '%(Display)' == 'true' "/>
</Target>
</Project>
既知のアイテム メタデータ
項目のコレクションに項目を追加すると、その項目が作成され、項目のファイル名を含む %(Filename) などの既知のアイテム メタデータに割り当てられます。既知のアイテム メタデータの完全な一覧については、「MSBuild 既知のアイテム メタデータ」を参照してください。
項目コレクションの変換
既存の項目コレクションを新しい項目コレクションに変換できます。たとえば、@(CppFiles -> '%(Filename).obj') のような式を使用すると、.cpp ファイルの項目コレクションを .obj ファイルのコレクションに変換できます。詳細については、「MSBuild 変換」を参照してください。
参照
処理手順
方法 : ワイルドカードを使用してディレクトリ内のすべてのファイルをビルドする
方法 : ディレクトリ内の特定の 1 ファイルを除くすべてのファイルをビルドする