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

MSBuildMSBuild プロジェクト ファイルを作成した経験があれば、同じタスクとターゲットを別のプロジェクト ファイルで使用する必要があることにお気付きでしょう。If you have authored several MSBuildMSBuild project files, you might have discovered that you need to use the same tasks and targets in different project files. すべてのプロジェクト ファイルにそれらのタスクやターゲットの完全な説明を追加する代わりに、個別のプロジェクト ファイルにターゲットを保存し、そのプロジェクトをそのターゲットを必要とする他のプロジェクトにインポートできます。Instead of including the complete description of those tasks or targets in every project file, you can save a target in a separate project file and then import that project into any other project that needs to use the target.

Import 要素の使用Using the Import Element

Import 要素は、あるプロジェクト ファイルを別のプロジェクト ファイルに挿入するために使用されます。The Import element is used to insert one project file into another project file. インポートされるプロジェクト ファイルは有効な MSBuildMSBuild プロジェクト ファイルでなければならず、整形式の XML が含まれている必要があります。The project file that is being imported must be a valid MSBuildMSBuild project file and contain well-formed XML. Project 属性は、インポートされたプロジェクト ファイルのパスを指定します。The Project attribute specifies the path to the imported project file. Import 要素に関する詳細については、「Import 要素 (MSBuild)」を参照してください。For more information on the Import element, see Import Element (MSBuild).

プロジェクトをインポートするにはTo import a project

  1. インポートを行うプロジェクトのファイルで、インポートされるプロジェクトのプロパティとアイテムを対象に、パラメーターとして使用されるすべてのプロパティとアイテムを定義します。Define, in the importing project file, all properties and items that are used as parameters for properties and items in the imported project.

  2. Import 要素を使用し、プロジェクトをインポートします。Use the Import element to import the project. 例:For example:

    <Import Project="MyCommon.targets"/>

  3. Import 要素に続き、インポートされるプロジェクトのプロパティとアイテムの既定の定義を無視するすべてのプロパティとアイテムを定義します。Following the Import element, define all properties and items that must override default definitions of properties and items in the imported project.

評価の順序Order of Evaluation

MSBuildMSBuildImport 要素に到達すると、インポートされるプロパティとアイテムは、Import 要素の場所で、インポートを行うプロジェクトに効果的に挿入されます。When MSBuildMSBuild reaches an Import element, the imported project is effectively inserted into the importing project at the location of the Import element. そのため、Import 要素の場所は、プロパティとアイテムの値に影響を与えます。Therefore, the location of the Import element can affect the values of properties and items. インポートされるプロジェクトにより設定されるプロパティとアイテムとインポートされるプロジェクトで使用されるプロパティとアイテムを理解することが重要です。It is important to understand the properties and items that are set by the imported project, and the properties and items that the imported project uses.

プロジェクトをビルドするとき、すべてのプロパティが最初に評価され、続いてアイテムが評価されます。When the project builds, all properties are evaluated first, followed by items. たとえば、次の XML では、インポートされるプロジェクトファイル MyCommon.targets が定義されます。For example, the following XML defines the imported project file MyCommon.targets:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
    <PropertyGroup>  
        <Name>MyCommon</Name>  
    </PropertyGroup>  

    <Target Name="Go">  
        <Message Text="Name=$(Name)"/>  
    </Target>  
</Project>  

次の XML は MyApp.proj を定義します。MyApp.proj は MyCommon.targets をインポートします。The following XML defines MyApp.proj, which imports MyCommon.targets:

<Project  
    DefaultTargets="Go"  
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
    <PropertyGroup>  
        <Name>MyApp</Name>  
    </PropertyGroup>  
    <Import Project="MyCommon.targets"/>  
</Project>  

プロジェクトをビルドするとき、次のメッセージが表示されます。When the project builds, the following message is displayed:

Name="MyCommon"

プロジェクトはプロパティ Name が MyApp.proj で定義された後にインポートされるため、MyCommon.targets の Name の定義により MyApp.proj の定義が無視されます。Because the project is imported after the property Name has been defined in MyApp.proj, the definition of Name in MyCommon.targets overrides the definition in MyApp.proj. プロパティ Name が定義される前にプロジェクトがインポートされた場合、ビルドは次のメッセージを表示します。If, the project is imported before the property Name is defined, the build would display the following message:

Name="MyApp"

プロジェクトのインポート時に次のアプローチを使用するUse the following approach when importing projects

  1. プロジェクトのファイルで、インポートされるプロジェクトのプロパティとアイテムを対象に、パラメーターとして使用されるすべてのプロパティとアイテムを定義します。Define, in the project file, all properties and items that are used as parameters for properties and items in the imported project.

  2. プロジェクトをインポートします。Import the project.

  3. プロジェクト ファイルで、インポートされるプロジェクトのプロパティとアイテムの既定の定義を無視するすべてのプロパティとアイテムを定義します。Define in the project file all properties and items that must override default definitions of properties and items in the imported project.

Example

次のコード サンプルは、2 つ目のコード サンプルがインポートする MyCommon.targets ファイルを示します。The following code example shows the MyCommon.targets file that the second code example imports. .targets ファイルは、インポートを行うプロジェクトからのプロパティを評価してビルドを構成します。The .targets file evaluates properties from the importing project to configure the build.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
    <PropertyGroup>  
        <Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>  
        <Optimize Condition="'$(Flavor)'=='RETAIL'">yes</Optimize>  
        <appname>$(MSBuildProjectName)</appname>  
    <PropertyGroup>  
    <Target Name="Build">  
        <Csc Sources="hello.cs"  
            Optimize="$(Optimize)"  
            OutputAssembly="$(appname).exe"/>  
    </Target>  
</Project>  

Example

次のコード サンプルは、MyCommon.targets ファイルをインポートします。The following code example imports the MyCommon.targets file.

<Project DefaultTargets="Build"  
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
    <PropertyGroup>  
        <Flavor>RETAIL</Flavor>  
    </PropertyGroup>  
    <Import Project="MyCommon.targets"/>  
</Project>  

関連項目See Also

Import 要素 (MSBuild) Import Element (MSBuild)
ターゲットTargets