コードの共有の概要Sharing code overview

このドキュメントでは、クロスプラットフォームプロジェクト (.NET Standard、共有プロジェクト、およびポータブルクラスライブラリ) 間でコードを共有するさまざまな方法 (それぞれの利点と欠点を含む) を比較します。This document compares the different methods of sharing code between cross-platform projects: .NET Standard, Shared Projects, and Portable Class Libraries, including the benefits and disadvantages of each.

クロスプラットフォームアプリケーション間でコードを共有するには、次の3つの方法があります。There are three methods for sharing code between cross-platform applications:

  • .NET Standard ライブラリ– .NET Standard プロジェクトは、複数のプラットフォーム間で共有されるコードを実装できます。また、多数の .net api にアクセスできます (バージョンによって異なります)。.NET Standard Libraries – .NET Standard projects can implement code to be shared across multiple platforms, and can access a large number of .NET APIs (depending on the version). .NET Standard 1.0-1.6 は、徐々に大きくなる Api のセットを実装しますが、.NET Standard 2.0 は .NET BCL (Xamarin アプリで利用可能な .NET Api を含む) の最適な範囲を提供します。.NET Standard 1.0 - 1.6 implement progressively larger sets of APIs, while .NET Standard 2.0 provides the best coverage of the .NET BCL (including the .NET APIs available in Xamarin apps).
  • 共有プロジェクト–共有アセットプロジェクトタイプを使用してソースコードを整理し、必要に応じて #if コンパイラディレクティブを使用してプラットフォーム固有の要件を管理します。Shared Projects – Use the Shared Asset Project type to organize your source code, and use #if compiler directives as required to manage platform-specific requirements.
  • ポータブルクラスライブラリ(非推奨) –ポータブルクラスライブラリ (pcl) は、共通の API サーフェイスを使用して複数のプラットフォームを対象とし、インターフェイスを使用してプラットフォーム固有の機能を提供できます。Portable Class Libraries (deprecated) – Portable Class Libraries (PCLs) can target multiple platforms with a common API surface, and use Interfaces to provide platform-specific functionality. PCLs は、Visual Studio の最新バージョンでは非推奨とされており、代わりに .NET Standard を使用 – ます。PCLs are deprecated in the latest versions of Visual Studio – use .NET Standard instead.

コード共有戦略の目的は、この図に示すアーキテクチャをサポートすることです。ここでは、単一のコードベースを複数のプラットフォームで使用できます。The goal of a code-sharing strategy is to support the architecture shown in this diagram, where a single codebase can be utilized by multiple platforms.

共有コードアプリケーションのアーキテクチャShared code application architecture

この記事では、アプリケーションに適したプロジェクトの種類を選択するために使用できる方法を比較します。This article compares the methods available to help you choose the right project type for your applications.

.NET Standard ライブラリ.NET Standard Libraries

.NET Standardライブラリは、さまざまな種類のプロジェクトで参照できる、適切に定義された基本クラスライブラリのセットを提供します。これには、xamarin Android や xamarin などのクロスプラットフォームプロジェクトが含まれます。.NET Standard libraries provide a well defined set of the base class libraries that can be referenced in different project types, including cross-platform projects like Xamarin.Android and Xamarin.iOS. 既存の .NET Framework コードとの互換性を最大にするには、.NET Standard 2.0 をお勧めします。.NET Standard 2.0 is recommended for maximum compatibility with existing .NET Framework code.

.NET Standard ダイアグラム.NET Standard diagram

利点Benefits

  • を使用すると、複数のプロジェクト間でコードを共有できます。Allows you to share code across multiple projects.
  • リファクタリング操作は、常に、影響を受けるすべての参照を更新します。Refactoring operations always update all affected references.
  • .NET 基底クラスライブラリ (BCL) の大きな領域は、PCL プロファイルで使用できます。A larger surface area of the .NET Base Class Library (BCL) is available than PCL profiles. 特に、.NET Standard 2.0 は、.NET Framework とほぼ同じ API サーフェイスを備えており、新しいアプリには、既存の PCLs を移植することをお勧めします。In particular, .NET Standard 2.0 has almost the same API surface as the .NET Framework and is recommended for new apps and porting existing PCLs.

短所Disadvantages

  • #if __IOS__のようなコンパイラディレクティブは使用できません。Cannot use compiler directives like #if __IOS__.

RemarksRemarks

.NET Standard はPCL に似ていますが、プラットフォームのサポートと BCL のクラスの数がより単純なモデルになっています。.NET Standard is similar to PCL, but with a simpler model for platform support and a greater number of classes from the BCL.

共有プロジェクトShared Projects

共有プロジェクトには、コードファイルと、それらを参照するプロジェクトに含まれるアセットが含まれています。Shared Projects contain code files and assets that are included in any project that references them. プロジェクトの共有は、コンパイルされた出力を独自に生成しません。Share projects do not produce compiled output on their own.

このスクリーンショットは、次の3つのアプリケーションプロジェクト (Android、iOS、および Windows 用) を含むソリューションファイルを示しC#ています。共有プロジェクトには、共通のソースコードファイルが含まれています。This screenshot shows a solution file containing three application projects (for Android, iOS, and Windows), with a Shared project that contains common C# source code files:

共有プロジェクトソリューションShared project solution

概念アーキテクチャは次の図のようになります。各プロジェクトには、すべての共有ソースファイルが含まれています。The conceptual architecture is shown in the following diagram, where each project includes all the shared source files:

共有プロジェクトダイアグラムShared project diagram

Example

IOS、Android、および Windows をサポートするクロスプラットフォームアプリケーションでは、プラットフォームごとにアプリケーションプロジェクトが必要になります。A cross platform application that supports iOS, Android, and Windows would require an application project for each platform. 共通コードは共有プロジェクトに存在します。The common code lives in the Shared Project.

ソリューションの例には、次のフォルダーとプロジェクトが含まれています (表現力のためにプロジェクト名が選択されています。プロジェクトでは、これらの名前付けガイドラインに従う必要はありません)。An example solution would contain the following folders and projects (project names have been chosen for expressiveness, your projects do not have to follow these naming guidelines):

  • 共有–すべてのプロジェクトに共通のコードを含む共有プロジェクト。Shared – Shared Project containing the code common to all projects.
  • Appandroid – Xamarin アプリケーションプロジェクト。AppAndroid – Xamarin.Android application project.
  • Appios – Xamarin ios アプリケーションプロジェクト。AppiOS – Xamarin.iOS application project.
  • Appwindows – windows アプリケーションプロジェクト。AppWindows – Windows application project.

この方法では、3つのアプリケーションプロジェクトが同じソースコード ( C#共有内のファイル) を共有しています。In this way the three application projects are sharing the same source code (the C# files in Shared). 共有コードの編集は、3つのプロジェクトすべてで共有されます。Any edits to the shared code will be shared across all three projects.

利点Benefits

  • を使用すると、複数のプロジェクト間でコードを共有できます。Allows you to share code across multiple projects.
  • 共有コードは、コンパイラディレクティブを使用してプラットフォームに基づいて分岐できます (Shared code can be branched based on the platform using compiler directives (eg. クロスプラットフォームアプリケーションの構築」ドキュメントで説明されているように、#if __ANDROID__ の使用。using #if __ANDROID__ , as discussed in the Building Cross Platform Applications document).
  • アプリケーションプロジェクトには、共有コードが利用できるプラットフォーム固有の参照 (Windows Phone の Tasky サンプルでの Community.CsharpSqlite.WP7 の使用など) を含めることができます。Application projects can include platform-specific references that the shared code can utilize (such as using Community.CsharpSqlite.WP7 in the Tasky sample for Windows Phone).

短所Disadvantages

  • ' Inactive ' コンパイラディレクティブ内のコードに影響を与えるリファクタリングは、これらのディレクティブ内のコードを更新しません。Refactorings that affect code inside 'inactive' compiler directives will not update the code inside those directives.
  • 他のほとんどのプロジェクトの種類とは異なり、共有プロジェクトには ' output ' アセンブリがありません。Unlike most other project types, a Shared Project has no 'output' assembly. コンパイル時に、ファイルは参照元のプロジェクトの一部として処理され、そのアセンブリにコンパイルされます。During compilation, the files are treated as part of the referencing project and compiled into that assembly. コードをアセンブリとして共有する場合は、.NET Standard またはポータブルクラスライブラリを使用することをお勧めします。If you wish to share your code as a assembly then .NET Standard or Portable Class Libraries are a better solution.

RemarksRemarks

アプリケーション開発者向けの優れたソリューションで、アプリ内での共有のみを目的としたコードを作成できます (他の開発者に配布することはできません)。A good solution for application developers writing code that is only intended for sharing in their app (and not distributing to other developers).

ポータブル クラス ライブラリPortable Class Libraries

ヒント

ポータブルクラスライブラリよりも .NET Standard 2.0 ライブラリをお勧めします。.NET Standard 2.0 libraries are recommended over Portable Class Libraries.

ポータブルクラスライブラリの詳細については、こちらを参照してください。Portable Class Libraries are discussed in detail here.

ポータブルクラスライブラリの図Portable class library diagram

利点Benefits

  • を使用すると、複数のプロジェクト間でコードを共有できます。Allows you to share code across multiple projects.
  • リファクタリング操作は、常に、影響を受けるすべての参照を更新します。Refactoring operations always update all affected references.

短所Disadvantages

  • Visual Studio の最新バージョンで非推奨とされました。代わりに .NET Standard ライブラリをお勧めします。Deprecated in the latest versions of Visual Studio, .NET Standard libraries are recommended instead. PCL と .NET Standardの違いについては、こちらを参照してください。Refer to this explanation of the differences between PCL and .NET Standard.
  • コンパイラディレクティブは使用できません。Cannot use compiler directives.
  • 使用できる .NET framework のサブセットは、選択したプロファイルによって決まります (詳細については、「 PCL の概要」を参照してください)。Only a subset of the .NET framework is available to use, determined by the profile selected (see the Introduction to PCL for more info).

RemarksRemarks

PCL テンプレートは、最新バージョンの Visual Studio では非推奨と見なされます。PCL template is considered deprecated in the latest versions of Visual Studio.

まとめSummary

選択するコード共有戦略は、対象とするプラットフォームによって決まります。The code sharing strategy you choose will be driven by the platforms you are targeting. プロジェクトに最適な方法を選択します。Choose a method that works best for your project.

.NET Standard は、共有可能なコードライブラリ (特に NuGet での公開) を構築する場合に最適な選択肢です。.NET Standard is the best choice for building sharable code libraries (especially publishing on NuGet). 共有プロジェクトは、クロスプラットフォームアプリでプラットフォーム固有の多くの機能を使用することを計画しているアプリケーション開発者に適しています。Shared Projects work well for application developers planning to use lots of platform-specific functionality in their cross-platform apps.

PCL プロジェクトは Visual Studio で引き続きサポートされますが、新しいプロジェクトには .NET Standard をお勧めします。While PCL projects continue to be supported in Visual Studio, .NET Standard is recommended for new projects.