Import 要素 (MSBuild)

1 つのプロジェクト ファイルの内容を別のプロジェクト ファイルにインポートします。

<Project> <Import>

構文

<Import Project="ProjectPath"
    Condition="'String A'=='String B'" />

属性と要素

以降のセクションでは、属性、子要素、および親要素について説明します。

属性

属性 説明
Project 必須の属性です。

インポートするプロジェクト ファイルのパス。 パスにはワイルドカードを含めることができます。 一致するファイルは、並べ替えられた順にインポートされます。 この機能を使用すると、コード ファイルをディレクトリに追加するだけで、プロジェクトにコードを追加できます。
Condition 省略可能な属性です。

評価する条件です。 詳細については、「条件」を参照してください。
Sdk 省略可能な属性です。

プロジェクト SDK を参照します。

子要素

なし

親要素

要素 説明
プロジェクト MSBuild プロジェクト ファイルの必須のルート要素です。
ImportGroup オプションの条件下でグループ化された Import 要素のコレクションが格納されます。

解説

Import 要素を使用すると、複数のプロジェクト ファイルに共通するコードを再利用できます。 これにより、共有されたコードに対する更新が、そのコードをインポートしたすべてのプロジェクトに反映されるため、コードの保守が容易になります。

規則により、インポートされた共有プロジェクト ファイルは .targets ファイルとして保存されますが、これらは標準の MSBuild プロジェクト ファイルです。 MSBuild では、別のファイル名拡張子を持つプロジェクトをインポートすることもできますが、一貫性のために .targets 拡張子を使用することをお勧めします。

インポートされるプロジェクト内の相対パスは、インポートする側のプロジェクトのディレクトリからの相対パスであると解釈されます (いくつかの例外についてはこの段落の後半で説明します)。 したがって、あるプロジェクト ファイルを別々の場所に存在する複数のプロジェクト ファイルにインポートする場合、インポートされるプロジェクト ファイル内の相対パスは、インポートされるプロジェクトごとに異なって解釈されます。 ただし、例外が 2 つあります。 1 つは、Import 要素では、パスは常に、Import 要素が含まれるプロジェクトの相対パスとして解釈されることです。 もう 1 つの例外は、UsingTask では常に、AssemblyFile 属性の相対パスは UsingTask 要素が含まれるファイルに相対であるとして解釈されることです。

MSBuild で予約されている、プロジェクト ファイル関連の全プロパティ (例: MSBuildProjectDirectoryMSBuildProjectFile) は、インポートされたプロジェクトで参照される場合、インポートするプロジェクト ファイルに基づいて値が割り当てられます。

インポートされるプロジェクトに DefaultTargets 属性がない場合は、インポートされる各プロジェクトがインポート順にチェックされ、最初に検出された DefaultTargets 属性の値が使用されます。 たとえば、ProjectA で ProjectB と ProjectC を (この順序で) インポートし、ProjectB で ProjectD をインポートする場合、MSBuild では、ProjectA、ProjectB、ProjectD、ProjectC の順序で指定された DefaultTargets が検索されます。

インポートされるプロジェクトのスキーマは、標準プロジェクトのスキーマと同じです。 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="http://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>

関連項目