あるプロジェクト ファイルの内容を別のプロジェクト ファイルにインポートします。
<Project><Import>
構文
<Import Project="ProjectPath"
Condition="'String A'=='String B'" />
属性と要素
次のセクションでは、属性、子要素、および親要素について説明します。
Attributes
| 特性 | Description |
|---|---|
Project |
必須の属性。 インポートするプロジェクト ファイルのパス。 パスにはワイルドカードを含めることができます。 一致するファイルは、並べ替えられた順序でインポートされます。 この機能を使用すると、コード ファイルをディレクトリに追加するだけで、プロジェクトにコードを追加できます。 |
Condition |
省略可能な属性。 評価する条件。 詳細については、「 条件」を参照してください。 |
Label |
省略可能な属性。 このインポート要素に識別子を適用します。 |
Sdk |
省略可能な属性。 プロジェクト SDK を参照します。 |
子要素
None
親要素
| 要素 | Description |
|---|---|
| プロジェクト | MSBuild プロジェクト ファイルの必須ルート要素。 |
| ImportGroup | 省略可能な条件でグループ化された Import 要素のコレクションを格納します。 |
注釈
Import要素を使用すると、多くのプロジェクト ファイルに共通するコードを再利用できます。 インポートを使用すると、共有コードに対して行った更新が、それをインポートするすべてのプロジェクトに反映されるため、コードの保守が容易になります。
慣例により、インポートされた共有プロジェクト ファイルは .targets ファイルとして保存されますが、これらは標準の MSBuild プロジェクト ファイルです。 MSBuild では、別のファイル名拡張子を持つプロジェクトをインポートできませんが、一貫性を保つため、 .targets 拡張子を使用することをお勧めします。
インポートされたプロジェクトの相対パスは、インポートするプロジェクトのディレクトリを基準にして解釈されます (この段落で後述するいくつかの例外があります)。 したがって、プロジェクト ファイルが異なる場所にある複数のプロジェクト ファイルにインポートされる場合、インポートされたプロジェクト ファイル内の相対パスは、インポートされたプロジェクトごとに異なる方法で解釈されます。 2 つの例外があります。 1 つの例外として、 Import 要素では、パスは常に、 Import 要素を含むプロジェクトを基準にして解釈されます。 もう 1 つの例外は、UsingTaskは常に、UsingTask要素を含むファイルに対するAssemblyFile属性の相対パスを解釈することです。
インポートされたプロジェクトで参照されるプロジェクト ファイルに関連するすべての MSBuild 予約プロパティ ( MSBuildProjectDirectory や MSBuildProjectFileなど) には、インポートするプロジェクト ファイルに基づいて値が割り当てられます。
インポートされたプロジェクトに DefaultTargets 属性がない場合、インポートされたプロジェクトはインポートされた順序で検査され、最初に検出された DefaultTargets 属性の値が使用されます。 たとえば、ProjectA が ProjectB と ProjectC を (その順序で) インポートし、ProjectB が ProjectD をインポートする場合、MSBuild は最初に ProjectA で指定された DefaultTargets を探し、次に ProjectB、ProjectD、最後に ProjectC を探します。
インポートされたプロジェクトのスキーマは、標準プロジェクトのスキーマと同じです。 MSBuild はインポートされたプロジェクトをビルドできる可能性がありますが、通常、インポートされたプロジェクトには、設定するプロパティやターゲットを実行する順序に関する情報が含まれていない可能性は低いです。 インポートされたプロジェクトは、その情報を提供するためにインポート先のプロジェクトによって異なります。
ワイルドカード
MSBuild では、Project 属性でワイルドカードを使用できます。 ワイルドカードがある場合、見つかったすべての一致が (再現性のために) 並べ替えられた後、順序が明示的に設定されているかのようにその順序でインポートされます。
これは、他のユーザーがインポートするファイルに明示的にファイル名を追加しなくてもファイルをインポートできるように、拡張ポイントを提供する場合に便利です。 このため、 Microsoft.Common.Targets には、ファイルの先頭に次の行が含まれています。
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore\*" Condition="'$(ImportByWildcardBeforeMicrosoftCommonTargets)' == 'true' and exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore')"/>
Example
次の例は、いくつかの項目とプロパティを持ち、一般的なプロジェクト ファイルをインポートするプロジェクトを示しています。
<Project DefaultTargets="Compile">
<PropertyGroup>
<resourcefile>Strings.resx</resourcefile>
<compiledresources>
$(O)\$(MSBuildProjectName).Strings.resources
</compiledresources>
</PropertyGroup>
<ItemGroup>
<CSFile Include="*.cs" />
<Reference Include="System" />
<Reference Include="System.Data" />
</ItemGroup>
<Import Project="$(CommonLocation)\General.targets" />
</Project>