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

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

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

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

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

共有プロジェクトとは

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

共有プロジェクトのアーキテクチャ

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

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

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

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

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

共有プロジェクトの作成

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

新しい共有プロジェクト

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

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

空の共有プロジェクト

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

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

共有プロジェクトへのプロジェクト参照

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

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

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

[オプション] 画面を次に示します。 [プロジェクト名][既定の名前空間] は、一般的に変更する 2 つの設定のみです。

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

共有プロジェクトの例

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

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

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

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

iOS、Android、Windows Phoneの例

まとめ

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