Import 要素 (MSBuild)
あるプロジェクト ファイルから別のプロジェクト ファイルに内容をインポートします。
<Import Project="ProjectPath"
Condition="'String A'=='String B'" />
属性および要素
以降のセクションでは、属性、子要素、および親要素について説明します。
属性
属性 |
Description |
---|---|
Project |
必須の属性です。 インポートするプロジェクト ファイルのパスです。パスにはワイルドカードを含めることができます。一致するファイルは、並べ替えられた順序でインポートされます。この機能を使用すると、コード ファイルをディレクトリに追加するだけでプロジェクトにコードを追加できます。 |
Condition |
省略可能な属性です。 評価する条件です。詳細については、「MSBuild の条件」を参照してください。 |
子要素
なし
親要素
要素 |
Description |
---|---|
MSBuild プロジェクト ファイルの必須のルート要素です。 |
|
オプションの条件下でグループ化された Import 要素のコレクションが格納されます。 |
解説
Import 要素を使用すると、複数のプロジェクト ファイルに共通するコードを再利用できます。これにより、共有されたコードに対する更新が、そのコードをインポートしたすべてのプロジェクトに反映されるため、コードの保守が容易になります。
慣例により、インポートされた共有プロジェクト ファイルは .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) ブロックなどの条件付きブロックにコードを配置します。
[ワイルドカード]
.NET Framework 4 では、MSBuild で、Project 属性でのワイルドカードが許可されます。ワイルドカードがある場合、見つかったすべての一致が並べ替えられ (再現可能性の確保のため)、順序が明示的に設定されていたかのように、その順序でインポートされます。
これは、機能拡張ポイントを提供して、自身がファイル名をインポート対象のファイルに明示的に追加しなくても、他のユーザーがファイルをインポートできるようにする場合に便利です。このために、Microsoft.Common.Targets ではファイルの先頭に次の行が含まれています。
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore\*" Condition="'$(ImportByWildcardBeforeMicrosoftCommonTargets)' == 'true' and exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore')"/>
使用例
次の例は、いくつかの項目やプロパティがあり、一般的なプロジェクト ファイルをインポートするプロジェクトを示しています。
<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>
参照
処理手順
方法 : 複数のプロジェクト ファイルで同じターゲットを使用する