共有プロジェクトのコード共有

共有プロジェクトを使用すると、さまざまなアプリケーション プロジェクトによって参照される共通コードを記述できます。 コードは、参照している各プロジェクトの一部としてコンパイルされ、プラットフォーム固有の機能を共有コード ベースに組み込むのに役立つコンパイラ ディレクティブを含めることができます。

共有プロジェクト (共有アセット プロジェクトと呼ばれる場合もあります) を使用すると、Xamarin アプリケーションを含む複数のターゲット プロジェクト間で共有されるコードを記述できます。

これらはコンパイラ ディレクティブをサポートしているため、共有プロジェクトを参照しているプロジェクトのサブセットにコンパイルするプラットフォーム固有のコードを条件付きで含めることができます。 また、コンパイラ ディレクティブを管理し、各アプリケーションでのコードの外観を視覚化するのに役立つ IDE サポートもあります。

以前にファイル リンクを使用してプロジェクト間でコードを共有していた場合、共有プロジェクトも同様の方法で動作しますが、IDE のサポートが大幅に改善されています。

共有プロジェクトとは

他のほとんどの種類のプロジェクトとは異なり、共有プロジェクトには (DLL 形式での) 出力がありません。その代わりに、コードは、それを参照する各プロジェクトにコンパイルされます。 これを以下の図に示します。概念的には、共有プロジェクトの内容全体が、参照する各プロジェクトに "コピー" され、その一部であるかのようにコンパイルされます。

Shared Project architecture

共有プロジェクト内のコードには、コードを使用しているアプリケーション プロジェクトに応じてコードのセクションを有効または無効にするコンパイラ ディレクティブを含めることができます。これは、図の色付きのプラットフォーム ボックスで提案されます。

共有プロジェクトはそれ自体でコンパイルされることはなく、他のプロジェクトに含めることができる純粋なソース コード ファイルのグループとして存在します。 別のプロジェクトで参照されると、コードはそのプロジェクトの一部として効果的にコンパイルされます。 共有プロジェクトは、他のプロジェクトの種類 (他の共有プロジェクトを含む) を参照することはできません。

Android アプリケーション プロジェクトは、他の Android アプリケーション プロジェクトを参照できないことに注意してください。たとえば、Android 単体テスト プロジェクトでは Android アプリケーション プロジェクトを参照できません。 共有データセットの詳細については、こちらを参照してください。

Visual Studio for Mac のチュートリアル

このセクションでは、Visual Studio for Mac を使用して共有プロジェクトを作成および使用する方法について説明します。 完全な例については、「共有プロジェクトの例」セクションを参照してください。

共有プロジェクトの作成

新しい共有プロジェクトを作成するには、[ファイル] > [新しいソリューション...] に移動します (または、既存のソリューションを道クリックして、[追加] > [新しいプロジェクトを追加...] を選択します):

New Shared Project

次の画面で、プロジェクト名を選択し、[作成する] をクリックします。

新しい共有プロジェクトを以下に示します。参照ノードやコンポーネント ノードがないことに注意してください。これらは共有プロジェクトではサポートされていません。

Empty Shared Project

共有プロジェクトを役立つものにするには、少なくとも 1 つのビルド可能なプロジェクト (iOS、Android アプリケーション、ライブラリ、PCL プロジェクトなど) で参照する必要があります。 共有プロジェクトは、何も参照されていない場合はコンパイルされないため、構文 (またはその他の) エラーは、他の何かによって参照されるまで強調表示されません。

共有プロジェクトへの参照の追加は、通常のライブラリ プロジェクトを参照するのと同じ方法で行います。 このスクリーンショットは、共有プロジェクトを参照する Xamarin.iOS プロジェクトを示しています。

Project reference to Shared Project

共有プロジェクトが別のライブラリまたはアプリケーションによって参照されたら、ソリューションをビルドし、コード内のエラーを表示できます。 共有プロジェクトが他の 2 つ以上のプロジェクトで参照されている場合、ソース コード エディターの左上に、このファイルを参照しているプロジェクトを示すメニューが表示されます。

共有プロジェクト オプション

共有プロジェクトを右クリックし、[オプション] を選択すると、他のプロジェクトの種類よりも設定数が少なくなります。 共有プロジェクトは (それ自体では) コンパイルされないため、出力オプションやコンパイラ オプション、プロジェクト構成、アセンブリ署名、カスタム コマンドなどを設定することはできません。 共有プロジェクトのコードは、これらの値を参照しているものから効果的に継承します。

[オプション] 画面が下に表示されます。一般的に変更する設定は、[プロジェクト名][既定の名前空間] の 2 つだけです。

Shared Project Options

共有プロジェクトの例

Tasky の例では、共有プロジェクトを使用して、iOS、Android、Windows Phone アプリケーションのいずれにおいても使用される共通コードを含んでいます。 SQLite.cs および TaskRepository.cs のソース コード ファイルの両方で、コンパイラ ディレクティブ (例: #if __ANDROID__) を利用して、それらを参照するアプリケーションごとに異なる出力を生成します。

完全なソリューションの構造を次に示します (それぞれ Visual Studio for Mac と Visual Studio)。

Windows Phone プロジェクトは Visual Studio for Mac 内から移動できます。ただし、そのプロジェクトの種類は Visual Studio for Mac でのコンパイルではサポートされていません。

実行中のアプリケーションを以下に示します。

iOS, Android, Windows Phone examples

まとめ

このドキュメントでは、共有プロジェクトのしくみ、Visual Studio for Mac と Visual Studio の両方で共有プロジェクトを作成および使用する方法、共有プロジェクトの動作を示す簡単なサンプル アプリケーションについて説明しました。