MSBuild のマルチ ターゲット

更新 : 2010 年 8 月

Visual Studio を使用すると、いくつかのバージョンの .NET Framework のうち、任意のバージョンで動作するようにアプリケーションをコンパイルできます。 たとえば、同じアプリケーションを、.NET Framework Version 2.0 で動作するようにコンパイルしたり、.NET Framework Version 4 で動作するようにコンパイルしたりできます。 複数のフレームワークに対してコンパイルする機能をマルチ ターゲットといいます。

注意

Visual Studio は、開発用コンピューターにインストールされている最新バージョンの .NET Framework で動作します。

マルチ ターゲットには、次のような利点があります。

  • バージョン 2.0、3.0、3.5 などの以前のバージョンの .NET Framework を対象とするアプリケーションを開発できます。

  • Silverlight フレームワークなど、.NET Framework 以外のフレームワークを対象にできます。

  • ターゲット フレームワークの定義済みのサブセットであるフレームワーク プロファイルを対象にできます。

  • .NET Framework Version 4 のサービス パックがリリースされた場合、それを対象にできます。

  • マルチ ターゲットにより、ターゲット フレームワークで利用できる機能だけをアプリケーションが使用するように保証できます。

ターゲット フレームワークとは、ビルドするプロジェクトの実行対象とする .NET Framework の特定のバージョンを意味します。 ターゲット フレームワークが必要なのは、.NET Framework 2.0 バージョンにのみ対応するコンパイラ機能や .NET Framework の特定のバージョンにのみ付属するアセンブリへの参照が使用可能になるためです。

特定のフレームワークを対象とするアプリケーションをコンパイルするときは、次の 3 つのソフトウェア コンポーネントのセットを調整する必要があります。

  • ツール セット。アプリケーションの作成に使用されるコンパイラ、タスク、ターゲットが含まれます。

  • 参照アセンブリ。アプリケーションのデザインとビルドに使用されます。

  • ランタイム アセンブリ。アプリケーションの実行に使用されます。

ツール セット (ToolsVersion)

ツール セットは、MSBuild タスク、MSBuild ターゲット、および MSBuild と .NET Framework に付属のツールを集め、対応付けたものです。 ツール セットには、csc.exe や vbc.exe などのコンパイラ、共通 targets ファイル (microsoft.common.targets)、および共通 tasks ファイル (microsoft.common.tasks) が含まれています。 4.0 ツール セットを使用すると、.NET Framework Version 2.0、3.0、3.5、および 4 を対象とすることができます。 2.0 ツール セットで対象にできるのは、.NET Framework Version 2.0 だけです。

ツール セットを指定するには、プロジェクト ファイルの Project 要素の ToolsVersion 属性を設定します。次に例を示します。

<Project ToolsVersion="4.0" ...

対象とする各フレームワークのターゲット パックがインストールされていれば、Version 4.0 のツール セットを使用することで、さまざまなターゲット フレームワークで動作するアプリケーションをコンパイルできます。 詳細については、このトピックで後で説明する「ターゲット パック」を参照してください。

カスタム ツールセットを独自に作成することもできます。 詳細については、「標準ツールセット構成とカスタム ツールセット構成」を参照してください。

注意

Visual Studio には、ツール セットを変更するためのユーザー インターフェイスはありません。

参照アセンブリ

通常、フレームワークには参照アセンブリが関連付けられています。 参照アセンブリは、コードを持たない簡素化されたアセンブリであり、パブリック型とメンバーのみを公開します。

デザイン時とビルド時には、Visual Studio はターゲット フレームワークの参照アセンブリをフィルターとして使用して、そのフレームワークと互換性のある型およびメンバーだけを利用できるようにします。 たとえば、.NET Framework Version 3.5 を対象としている場合、.NET Framework Version 4 にしか用意されていない型やメンバーは、Visual Studio デザイナー ([参照の追加] ダイアログ ボックスの [.NET] タブなど) に表示されず、ビルド処理でも利用できなくなります。

たとえば、LINQ は Visual Studio 2008 に含まれる新しいテクノロジです。LINQ 関連のアセンブリが含まれる .NET Framework のバージョンは .NET Framework 3.5 だけです。 したがって、プロジェクトが .NET Framework 3.5 以降を明確に対象としていない限り、LINQ を使用することはできません。 同様に、Windows Presentation Foundation (WPF) は Windows Vista に含まれています。 プロジェクトが .NET Framework 3.0 以降のバージョンの .NET Framework を対象としていない限り、WPF アプリケーションをビルドすることはできません。

ターゲット パック

参照アセンブリは、対応するターゲット パックがインストールされている場合に使用できるようになります。 ターゲット パックには、参照アセンブリと、それらのリストが記述された FrameworkList.xml ファイルが含まれています。 FrameworkList.xml ファイルは、再配布 (Redist) リストとも呼ばれます。

ターゲット パックは次のソースから入手できます。

  • .NET Framework 2.0 Version 2.0、3.0、3.5 のターゲット パックは .NET Framework 3.5 SP1 に付属しています。

  • .NET Framework Version 3.5 Client Profile、.NET Framework Version 4 および Version 4 Client Profile、Silverlight のターゲット パックは、Visual Studio に付属しています。

通常、ターゲット パックは .. \Program Files (x86)\Reference Assemblies\Microsoft\Framework\ フォルダーにインストールされます。 .NET Framework Version 2.0 のターゲット パックは、通常は .. \Windows\Microsoft.NET\Framework\v2.0.50727\ フォルダーにインストールされます。

ソリューションまたはプロジェクトをコマンド ラインでビルドする場合、msbuild.exe に対して ToolsVersion 属性を指定すると、その ToolsVersion に従ってすべてのプロジェクトとそのプロジェクト間の依存関係がビルドされます。ソリューション内の各プロジェクトの Project 要素 (MSBuild) に独自の ToolsVersion 属性が指定されていても、その値は無視されます。

ランタイム アセンブリ

フレームワークのターゲット パックがインストールされていない場合、Visual Studio でそのターゲット フレームワークを設定することはできません。 たとえば、.NET Framework Version 3.0 を対象とするには、その参照アセンブリおよび互換性のあるアセンブリがインストールされている必要があります。 実行時には、共通言語ランタイム (CLR: Common Language Runtime) のフュージョン ローダーにより、アプリケーションがターゲット フレームワークのランタイム アセンブリにバインドされます。

ターゲット フレームワークの選択

プロジェクトのターゲット フレームワークを選択するには

  1. ソリューション エクスプローラーで、プロジェクト ノードを右クリックし、[プロパティ] をクリックします。

  2. [アプリケーション] タブの [ターゲット フレームワーク] ボックスの一覧でフレームワークを選択します。 この一覧には、ターゲット パックがインストールされているフレームワークだけが表示されます。

    Visual Studio は、選択された内容に応じて、プロジェクト ファイル内の次の 3 つの要素の値を設定します。

    • TargetFrameworkIdentifier 要素は、ターゲット フレームワークを指定します。次に例を示します。

      <TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier>

      この要素がない場合、既定値は ".NETFramework" になります。

    • TargetFrameworkVersion 要素は、ターゲット フレームワークのバージョンを指定します。次に例を示します。

      <TargetFrameworkVersion>v3.0</TargetFrameworkVersion>

    • TargetFrameworkProfile 要素は、ターゲット フレームワークのプロファイルを指定します。次に例を示します。

      <TargetFrameworkProfile>Client</TargetFrameworkVersion>

      この要素がない場合、フレームワーク全体が対象になります。

    これらの 3 つの要素が Visual Studio のビルド システムの共通のターゲットによって結合され、ターゲット フレームワーク モニカー (TFM: Target Framework Moniker) という識別子が形成されます。

シナリオ: Visual Studio が .NET Framework Version 3.5 を対象とする場合

Visual Studio が .NET Framework Version 4 で動作しているとします。 .NET Framework Version 3.5 を対象とするには、対応する参照アセンブリとランタイム アセンブリがインストールされている必要があります。 これらのアセンブリは、.NET Framework Version 3.5 SP1 に付属しています。

このシナリオの場合、Visual Studio デザイナーには、.NET Framework Version 3.5 の参照アセンブリによってフィルター処理されたものだけが表示されます。プロジェクトをビルドするときは、これらの参照アセンブリに対してビルドされます。 プロジェクトを実行すると、このプロジェクトは .NET Framework Version 3.5 のランタイム アセンブリで動作します。これらのランタイム アセンブリは、CLR Version 2.0 で動作します。

このアプリケーションを別のコンピューターに配置する場合は、そのコンピューターに .NET Framework Version 3.5 がインストールされている必要があります。 適切な再配布パッケージ (Redist) を使用すると、ターゲット コンピューターに Version 3.5 がインストールされているかどうかをチェックし、必要に応じてインストールできます。

シナリオ 2: Visual Studio が .NET Framework Version 4.1 で動作し、.NET Framework Version 4 を対象とする場合

.NET Framework Version 4.1 が利用できるようになり、Version 4 と Version 4.1 の両方が CLR Version 4 で実行されると仮定します。 .NET Framework Version 4.1 がインストールされている場合、Visual Studio は自動的に .NET Framework Version 4.1 で実行されます。

.NET Framework Version 4 を対象とするプロジェクトの場合、Visual Studio デザイナーで利用できる型とメンバーは、Version 4 の参照アセンブリによってフィルター処理されます。プロジェクトはこれらの参照アセンブリに対してビルドされ、生成されるアプリケーションは Version 4 のランタイム アセンブリで実行されます。

参照

概念

MSBuild の詳細な概念

その他の技術情報

デザイン時のアセンブリの解決

履歴の変更

日付

履歴

理由

2010 年 8 月

「.NET Framework の特定のバージョンを対象とする MSBuild の使用」をこのトピックに統合。

情報の拡充