Import 要素 (MSBuild)
更新 : 2007 年 11 月
あるプロジェクト ファイルから別のプロジェクト ファイルに内容をインポートします。
<Import Project="ProjectPath"
Condition="'String A'=='String B'" />
属性と要素
以降のセクションでは、属性、子要素、および親要素について説明します。
属性
属性 |
説明 |
---|---|
Project |
必須属性 インポートするプロジェクト ファイルのパスです。 |
Condition |
省略可能属性 評価する条件です。詳細については、「MSBuild の条件」を参照してください。 |
子要素
なし
親要素
要素 |
説明 |
---|---|
MSBuild プロジェクト ファイルの必須のルート要素です。 |
解説
Import 要素を使用すると、複数のプロジェクト ファイルに共通するコードを再利用できます。共通のコード ブロックを他のプロジェクト ファイルに移動すると、中央の場所でコードを管理して、変更を反映できます。たとえば、Project A および Project B でそれらのビルドに固有のアイテムおよびプロパティの値を設定し、Project C に共通のビルド処理を含めます。Project A および Project B で Project C をインポートし、ビルド処理に対する変更は 1 つのファイルだけで済むようにします。
インポートされた共通のプロジェクト ファイルは、慣例により .targets ファイルとして保存されますが、標準の MSBuild プロジェクト ファイルです。MSBuild では、別のファイル拡張子を使用してプロジェクトをインポートすることもできますが、一貫性を持たせるために .targets ファイル拡張子を使用することをお勧めします。
インポートされたプロジェクトの相対パスは、インポートされたプロジェクトのディレクトリからの相対パスであると解釈されます。したがって、あるプロジェクト ファイルを別々の場所に存在する複数のプロジェクト ファイルにインポートする場合、インポートされるプロジェクト ファイル内の相対パスは、インポートされるプロジェクトごとに異なって解釈されます。
MSBuildProjectDirectory および MSBuildProjectFile など、MSBuild で予約されている全プロパティは、プロジェクト ファイルに関連し、インポートされるプロジェクトで参照されますが、これらにはインポートするプロジェクト ファイルに基づいた値が代入されます。
インポートされるプロジェクトに DefaultTargets 属性がない場合は、インポートされる各プロジェクトがインポート順にチェックされ、最初に検出された DefaultTargets 属性の値が使用されます。たとえば、ProjectA で ProjectB および ProjectC を順番にインポートし、ProjectB で ProjectD をインポートする場合、MSBuild では、ProjectA、ProjectB、ProjectD、ProjectC の順に DefaultTargets を検索します。
インポートされるプロジェクトのスキーマは、標準プロジェクトのスキーマと同じです。MSBuild でインポートされるプロジェクトをビルドすることはできますが、インポートされるプロジェクトには、設定するプロパティやターゲットを実行する順序に関する情報が通常は含まれていないため、ビルドは失敗する可能性があります。インポートされるプロジェクトのこれらの情報は、インポートするプロジェクトに依存します。
メモ : |
---|
条件付き import ステートメントがコマンド ライン MSBuilds で動作するときは、Visual Studio 統合開発環境 (IDE) でホストされる MSBuild とは連携しません。条件付きインポートは、プロジェクトを読み込むときに初期構成およびプラットフォームの既定値を使用して評価されます。その後、プロジェクト ファイルでの条件の再評価が必要となる変更 (プラットフォームの変更など) が加えられると、Visual Studio はプロパティとアイテムの条件を再評価します。ただし、インポートの再評価は行いません。インポート条件は再評価されないため、インポートはスキップされます。 このような状況が発生することを回避するには、.targets ファイルに条件付き import ステートメントを配置するか、または Choose 要素 (MSBuild) ブロックなどの条件ブロックにコードを配置します。 |
使用例
次のコード例は、いくつかのアイテムやプロパティを設定し、一般的なプロジェクト ファイルをインポートするプロジェクトを示しています。
<Project DefaultTargets="Compile"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<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>
参照
処理手順
方法 : 複数のプロジェクト ファイルで同じターゲットを使用する