次の方法で共有


NuGet 用の新しいプラットフォーム固有ライブラリ プロジェクトの作成

iOS や Android などの特定のプラットフォームを対象とするマルチプラットフォーム ライブラリ プロジェクトは、共有プロジェクトで最適に機能します。

NuGet には、iOS と Android 固有のコードの両方と、両方に共通する .NET コードを含めることができます。

複数のアセンブリが作成され、単一の NuGet パッケージに組み込まれます。 NuGet 標準は、Xamarin.iOS や Android プロジェクトなど、サポートされているすべてのプロジェクト タイプにパッケージを追加できることを保証します。

クロスプラットフォーム ライブラリ NuGet を作成する手順

  1. [ファイル] > [新規ソリューション] を選択します (または、既存のソリューションを右クリックして [追加] > [新規プロジェクト] を選択します)。

  2. 以下のように [マルチプラットフォーム] > [ライブラリ] から [マルチプラットフォーム ライブラリ] を選択します。

    Configure multi-platform library for a single code base

  3. 以下のように [名前][説明] を入力し、[プラットフォーム固有] を選択します。

    Configure platform-specific library for iOS and Android

  4. ウィザードの完了。 以下のプロジェクトがソリューションに追加されます。

    • Android プロジェクト – このプロジェクトには Android 固有コードを必要に応じて追加できます。
    • iOS プロジェクト – このプロジェクトには iOS 固有コードを必要に応じて追加できます。
    • NuGet プロジェクト – このプロジェクトにコードは追加されません。 これは他のプロジェクトを参照し、NuGet パッケージ出力のためのメタデータ構成を含みます。
    • 共有プロジェクト#if コンパイラ ディレクティブ内のプラットフォーム固有コードを含め、共通コードはこのプロジェクトに追加する必要があります。
  5. 以下のように NuGet プロジェクトを右クリックし [オプション] を選択した後、[NuGet パッケージ] > [メタデータ] セクションを開き、必要なメタデータ (およびオプションのメタデータ) を入力します。

    Enter required metadata

  6. また、以下のように [プロジェクト オプション] ウィンドウで、[参照アセンブリ] セクションを開き、共有ライブラリが "bait and switch" を介してどの PCL プロファイルをサポートするかを選択します。

    Also in the Project Options window, open the Reference Assemblies section and choose which PCL profiles the shared library will support via bait and switch

    Note

    "bait and switch" とは、PCL アセンブリがライブラリによって公開された API のみを含むようになることを意味します (プラットフォーム固有コードを含むことはできません)。 NuGet が Xamarin プロジェクトに追加されると、共有ライブラリは PCL に対してコンパイルされますが、プラットフォーム固有アセンブリには、iOS または Android プロジェクトで実際に使用されるコードが含まれます。

  7. プロジェクトを右クリックし、[NuGet パッケージの作成] を選択する (またはソリューションのビルドかデプロイを行う) と、.nupkg NuGet パッケージ ファイルが (構成に応じてデバッグまたはリリースのどちらかの) /bin/ フォルダーに保存されます。

    NuGet package file will be saved in the bin folder either Debug or Release, depending on configuration

出力の確認

NuGet パッケージは ZIP ファイルでもあるため、生成されたパッケージの内部構造を調べることができます。

次のスクリーンショットは、iOS と Android をサポートし、2 つの参照アセンブリが選択されたプラットフォーム固有 NuGet の内容を示しています。

Files contained in the NuGet package