Import 要素 (MSBuild)Import Element (MSBuild)

1 つのプロジェクト ファイルの内容を別のプロジェクト ファイルにインポートします。Imports the contents of one project file into another project file.

<Project><Project>
<Import><Import>

構文Syntax

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

属性および要素Attributes and Elements

以降のセクションでは、属性、子要素、および親要素について説明します。The following sections describe attributes, child elements, and parent elements.

属性Attributes

属性Attribute 説明Description
Project 必須の属性です。Required attribute.

インポートするプロジェクト ファイルのパス。The path of the project file to import. パスにはワイルドカードを含めることができます。The path can include wildcards. 一致するファイルは、並べ替えられた順にインポートされます。The matching files are imported in sorted order. この機能を使用すると、コード ファイルをディレクトリに追加するだけで、プロジェクトにコードを追加できます。By using this feature, you can add code to a project just by adding the code file to a directory.
Condition 省略可能な属性です。Optional attribute.

評価する条件です。A condition to be evaluated. 詳細については、「条件」を参照してください。For more information, see Conditions.

子要素Child Elements

なしNone

親要素Parent Elements

要素Element 説明Description
プロジェクトProject MSBuildMSBuild プロジェクト ファイルの必須のルート要素です。Required root element of an MSBuildMSBuild project file.
ImportGroupImportGroup オプションの条件下でグループ化された Import 要素のコレクションが格納されます。Contains a collection of Import elements grouped under an optional condition.

コメントRemarks

Import 要素を使用すると、複数のプロジェクト ファイルに共通するコードを再利用できます。By using the Import element, you can reuse code that is common to many project files. これにより、共有されたコードに対する更新が、そのコードをインポートしたすべてのプロジェクトに反映されるため、コードの保守が容易になります。This makes it easier to maintain the code because any updates you make to the shared code get propagated to all the projects that import it.

慣例により、インポートされた共有プロジェクト ファイルは .targets ファイルとして保存されますが、これらは標準の MSBuildMSBuild プロジェクト ファイルです。By convention, shared imported project files are saved as .targets files, but they are standard MSBuildMSBuild project files. MSBuildMSBuild では、別のファイル名拡張子を使用してプロジェクトをインポートすることもできますが、一貫性を持たせるために .targets 拡張子を使用することをお勧めします。 does not prevent you from importing a project that has a different file name extension, but we recommend that you use the .targets extension for consistency.

インポートされるプロジェクト内の相対パスは、インポートする側のプロジェクトのディレクトリからの相対パスであると解釈されます。Relative paths in imported projects are interpreted relative to the directory of the importing project. したがって、あるプロジェクト ファイルを別々の場所に存在する複数のプロジェクト ファイルにインポートする場合、インポートされるプロジェクト ファイル内の相対パスは、インポートされるプロジェクトごとに異なって解釈されます。Therefore, if a project file is imported into several project files in different locations, the relative paths in the imported project file will be interpreted differently for each imported project.

MSBuildMSBuildMSBuildProjectDirectory など、 MSBuildProjectFileで予約されている全プロパティは、プロジェクト ファイルに関連し、インポートされるプロジェクトで参照されますが、これらにはインポートするプロジェクト ファイルに基づいた値が代入されます。All MSBuildMSBuild reserved properties that relate to the project file, for example, MSBuildProjectDirectory and MSBuildProjectFile, that are referenced in an imported project are assigned values based on the importing project file.

インポートされるプロジェクトに DefaultTargets 属性がない場合は、インポートされる各プロジェクトがインポート順にチェックされ、最初に検出された DefaultTargets 属性の値が使用されます。If the imported project does not have a DefaultTargets attribute, imported projects are inspected in the order that they are imported, and the value of the first discovered DefaultTargets attribute is used. たとえば、ProjectA で ProjectB および ProjectC を順番にインポートし、ProjectB で ProjectD をインポートする場合、 MSBuildMSBuild では、ProjectA、ProjectB、ProjectD、ProjectC の順に DefaultTargets を検索します。For example, if ProjectA imports ProjectB and ProjectC (in that order), and ProjectB imports ProjectD, MSBuildMSBuild first looks for DefaultTargets specified on ProjectA, then ProjectB, then ProjectD, and finally ProjectC.

インポートされるプロジェクトのスキーマは、標準プロジェクトのスキーマと同じです。The schema of an imported project is identical to that of a standard project. MSBuildMSBuild で、インポートされるプロジェクトをビルドできる場合もありますが、インポートされるプロジェクトには、設定するプロパティやターゲットを実行する順序に関する情報が通常は含まれていないため、ビルドできる可能性は低くなります。Although MSBuildMSBuild may be able to build an imported project, it is unlikely because an imported project typically does not contain information about which properties to set or the order in which to run targets. インポートされるプロジェクトのこれらの情報は、インポートするプロジェクトに依存します。The imported project depends on the project into which it is imported to provide that information.

注意

条件付き import ステートメントがコマンド ライン MSBuilds で動作するときは、 Visual StudioVisual Studio 統合開発環境 (IDE) の MSBuilds とは連携しません。While conditional import statements work in command-line MSBuilds, they do not work with MSBuild in the Visual StudioVisual Studio integrated development environment (IDE). 条件付きインポートは、プロジェクトを読み込むときに設定される構成およびプラットフォームの値を使用して評価されます。Conditional imports are evaluated by using the configuration and platform values that are set when the project is loaded. その後、プロジェクト ファイルでの条件の再評価が必要となる変更 (プラットフォームの変更など) が加えられると、 Visual StudioVisual Studio はプロパティと項目の条件を再評価します。ただし、インポートの条件の再評価は行いません。If changes are subsequently made that require a reevaluation of the conditionals in the project file, for example, changing the platform, Visual StudioVisual Studio reevaluates the conditions on properties and items, but not on imports. インポート条件は再評価されないため、インポートはスキップされます。Because the import conditional is not reevaluated, the import is skipped.

このような状況が発生することを回避するには、.targets ファイルに条件付き import ステートメントを配置するか、または Choose Element (MSBuild) ブロックなどの条件付きブロックにコードを配置します。To work around this, put conditional imports in the .targets files or put code in a conditional block such as a Choose Element (MSBuild) block.

ワイルドカードWildcards

.NET Framework 4 では、MSBuild で、Project 属性でのワイルドカードが許可されます。In the .NET Framework 4, MSBuild allows wildcards in the Project attribute. ワイルドカードがある場合、見つかったすべての一致が並べ替えられ (再現可能性の確保のため)、順序が明示的に設定されていたかのように、その順序でインポートされます。When there are wildcards, all matches found are sorted (for reproducibility), and then they are imported in that order as if the order had been explicitly set.

これは、機能拡張ポイントを提供して、自身がファイル名をインポート対象のファイルに明示的に追加しなくても、他のユーザーがファイルをインポートできるようにする場合に便利です。This is useful if you want to offer an extensibility point so that someone else can import a file without requiring you to explicitly add the file name to the importing file. このために、Microsoft.Common.Targets ではファイルの先頭に次の行が含まれています。For this purpose, Microsoft.Common.Targets contains the following line at the top of the file.

<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore\*" Condition="'$(ImportByWildcardBeforeMicrosoftCommonTargets)' == 'true' and exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore')"/>  

Example

次の例は、いくつかの項目やプロパティがあり、一般的なプロジェクト ファイルをインポートするプロジェクトを示しています。The following example shows a project that has several items and properties and imports a general project file.

<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>  

参照See Also

プロジェクト ファイル スキーマ リファレンス Project File Schema Reference
方法: 複数のプロジェクト ファイルで同じターゲットを使用するHow to: Use the Same Target in Multiple Project Files