方法 : 複数のプロジェクト ファイルで同じターゲットを使用する
複数の MSBuild プロジェクト ファイルを作成した場合、異なるプロジェクト ファイルで同じタスクやターゲットを使用しなければならないことがあります。すべてのプロジェクト ファイルにこれらのタスクやターゲットの完全な情報を含めるのではなく、ターゲットを別個のプロジェクト ファイルに保存しておき、そのプロジェクトを、同じターゲットを必要とする他のプロジェクトにインポートできます。
Import 要素の使用
あるプロジェクト ファイルを別のプロジェクト ファイルに挿入するには Import 要素を使用します。インポート対象のプロジェクト ファイルは、整形式 XML を使用した有効な MSBuild プロジェクト ファイルであることが必要です。インポート対象のプロジェクト ファイルのパスは、Project 属性で指定します。Import 要素の詳細については、「Import 要素 (MSBuild)」を参照してください。
プロジェクトをインポートするには
受け取り側のプロジェクト ファイルで、インポート対象のプロジェクトに存在するプロパティやアイテムのパラメーターとして使用される、すべてのプロパティおよびアイテムを定義します。
Import 要素を使用して、このプロジェクトをインポートします。以下はその例です。
<Import Project="MyCommon.targets"/>
Import 要素に続けて、インポート対象プロジェクトのプロパティおよびアイテムの既定の定義をオーバーライドする必要のあるプロパティおよびアイテムをすべて定義します。
評価の順序
MSBuild が Import 要素に到達すると、インポート対象プロジェクトが、受け取り側プロジェクトの Import 要素の位置に挿入されます。したがって、Import 要素の位置が、プロパティおよびアイテムの値に影響を与えることになります。インポート対象プロジェクトでプロパティやアイテムが設定されている場合、そのプロパティおよびアイテムが受け取り側のプロジェクトで使用される、という点を理解することが大切です。
プロジェクトをビルドするとき、まず、すべてのプロパティが評価され、アイテムはその後で評価されます。たとえば、次の XML では、インポート対象プロジェクト ファイル MyCommon.targets を定義しています。
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Name>MyCommon</Name>
</PropertyGroup>
<Target Name="Go">
<Message Text="Name=$(Name)"/>
</Target>
</Project>
次の XML は、MyCommon.targets をインポートする MyApp.proj を定義しています。
<Project
DefaultTargets="Go"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Name>MyApp</Name>
</PropertyGroup>
<Import Project="MyCommon.targets"/>
</Project>
プロジェクトをビルドすると、次のメッセージが表示されます。
Name="MyCommon"
プロジェクトは、MyApp.proj で Name プロパティが定義された後にインポートされるため、MyApp.proj の定義は、MyCommon.targets における Name の定義によってオーバーライドされます。Name プロパティが定義される前にプロジェクトがインポートされた場合、このビルドでは次のメッセージが表示されます。
Name="MyApp"
プロジェクトをインポートする場合は、次の手順に従います。
プロジェクト ファイルで、インポート対象のプロジェクトに存在するプロパティやアイテムのパラメーターとして使用される、すべてのプロパティおよびアイテムを定義します。
プロジェクトをインポートします。
プロジェクト ファイルで、インポート対象プロジェクトのプロパティおよびアイテムの既定の定義をオーバーライドする必要のあるプロパティおよびアイテムをすべて定義します。
使用例
次のコード例は、MyCommon.targets ファイルを示しています。このファイルを、2 つ目のコード例でインポートします。.targets ファイルは、受け取り側プロジェクトからのプロパティを評価してビルドを構成します。
<Project xmlns="https://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>
MyCommon.targets ファイルをインポートするコード例を次に示します。
<Project DefaultTargets="Build"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Flavor>RETAIL</Flavor>
</PropertyGroup>
<Import Project="MyCommon.targets"/>
</Project>