情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

[リンクとして追加] を使用してコードを共有する

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 | Windows 8

 

このトピックでは、Visual Studio で使用可能な [リンクとして追加] を使用して複数のプロジェクト間でコードを共有する方法と、Windows Phone 8 と Windows 8 で実行するアプリを作成する場合にこのテクニックを活用する方法について説明します。

このトピックは、次のセクションで構成されています。

 

Visual Studio では、プロジェクトごとにファイルをコピーしなくても、複数のプロジェクトで同じファイルを使用できます。たとえば次の図では、2 つのプロジェクトで SharedClass.cs という同じクラスを共有しています。

Alignment_Concept_ShareGeneric

このシンプルながら強力なコード共有方法を使用することで、ファイルやコード アセットを 1 回作成すれば、それを複数のプロジェクトで共有することができます。 プロジェクトにリンクされていることを除けば、そのファイルはプロジェクト内の他のファイルと同じように動作します。 ファイルを編集すると、そのファイルのリンク先となるすべてのプロジェクトに変更が適用されます。

Windows Phone 8 および Windows 8 で実行するアプリを作成する場合に、このコード共有手法を使用することができます。作成するアプリの種類によっては、複数のプロジェクト間でこのような方法でコードを共有できる場合があります。これは、ポータブル クラス ライブラリ内で共有できない、移植不能なコードを共有する場合に、とりわけ有効です。Windows ランタイム API は移植不能で、ポータブル クラス ライブラリでは使用できません。しかし、Windows Phone 8 と Windows 8 では Windows ランタイム API のサブセットを共有します。この API を使ってコードを作成すれば、両方のアプリでロジックを共有することができます。Windows Phone と Windows 8 に共通の Windows ランタイム API の詳細については、「Windows Phone ランタイム API」を参照してください。次の図は、ファイルを複数のプロジェクトにリンクすることでコードを共有する方法を示しています。

Alignment_Concept_ShareWin8WP8

この例では、 Windows Phone 8 プロジェクトと Windows 8 プロジェクトがあります。SharedClass.cs クラスには移植できないコードが含まれていますが、Windows Phone 8 と Windows 8 に共通な API を使って記述されています。各プロジェクトに対するリンクとしてこのクラスを追加することで、共有が可能になります。こうすることで、1 回コードを記述すれば、何回でもそのコードを使用できます。移植できない共通コードは共有クラスに抽象化され、各アプリ プロジェクトにはそのアプリに固有のコードと機能が格納されます。

一般論として、この手法を使用すれば、プラットフォームに依存せず、両方のアプリで使用できるコードを切り分けることができます。このタイプのコード共有に最適のシナリオを次に示しますが、コード共有に適したシナリオはこれらに限定されません。

  • 両方のアプリに共通するが、移植できないアプリ ロジック。Windows Phone 8 と Windows 8 では、Windows ランタイム API を使って、大量のインフラストラクチャ コード、またはオペレーティング システムや外部のデータ ソースとやり取りをするコードを記述できます。Windows Phone 8 では Windows ランタイム のサブセットを採用したため、この機能を使用するコードを 1 回記述すれば、複数のアプリ間でそのコードを共有することができます。たとえば両方のプラットフォームは、ネットワーキング、センサー、位置特定、アプリ内購入、および近接通信用に、同じ Windows ランタイム API を備えています。両方のプラットフォームは、これらの API について大きくオーバーラップしています。このコードは移植不能なため、ポータブル クラス ライブラリに格納できません。.NET Framework のポータブル ライブラリでは、Windows ランタイム はサポートされません。その代わり、アプリ内のクラス用にこれらの API の使用を切り分けて、リンクされたコード ファイルとして、Windows Phone 8 と Windows ストア の両方のアプリで共有することができます。Visual Studio の無料の Express バージョンを使用している場合は、ポータブル クラス ライブラリを作成することはできません。この場合は、このコード共有手法を使って、アプリ ロジックを共有してください。たとえば、Model-View-ViewModel (MVVM) パターンを使って作成したアプリでは、アプリのモデルと ViewModel を共有できます。

  • プラットフォームに依存しないユーザー コントロール。Windows Phone 8 と Windows 8 はどちらも、XAML を使って、リッチなユーザー エクスペリエンスを提供できます。2 つのプラットフォームではこのレイヤーの実装方法が異なっているため、API も異なる名前空間で定義されています。ただし、この違いは解決できないほどではありません。実際、複数のプラットフォームのさまざまな機能、型、およびメンバーに同じ名前が付けられていて、その動作も同じです。 優先されるガイダンスは、プラットフォームごとに最高のユーザー エクスペリンスを構築するということですが、両方に共通する UI から要素が抽出できる場合、1 回記述すれば、両方のアプリで共有できるケースがあります。条件を付けて XAML をコンパイルすることはできないため、共有されるユーザー コントロール内で定義された UI は、プラットフォームに依存しないものでなければなりません。ユーザー コントロールの分離コード クラスでは条件付きのコンパイルが可能なため、ある程度の柔軟性が実現します。

これが、コードを 1 回作成して、複数のプロジェクト間でそのコードを共有する簡単な方法です。コード内でプラットフォームの違いを処理する方法については、「Windows Phone 8 と Windows 8 のプラットフォームの違いを処理する」を参照してください。

Visual Studio で、プロジェクトからファイルへのリンクを確立します。

  1. ソリューション エクスプローラーでプロジェクトを右クリックし、[既存項目の追加] を選択するか、Shift + Alt + A キーを押します。

  2. [既存項目の追加] ダイアログ ボックスで追加するファイルを選択し、[追加] ボックスの一覧で [リンクとして追加] をクリックします。

    Alignment_Screenshot_AddAsLinkDialog
  3. ファイルが、リンク ファイルとしてプロジェクトに追加されます。つまり、このファイルはプロジェクトに物理的にコピーされるのではなく、単にそのファイルへのリンクが設定されるということです。 リンク ファイルには、プロジェクトに物理的に追加されたファイルとは異なるアイコンが付けられます。

    • 共有 Alignment_Screenshot_SharedClassIcon

    • 非共有 Alignment_Screenshot_NotSharedClassIcon

前述の手順を実行することで、プロジェクトにファイルのリンクを複数設定することができます。プロジェクトにリンクとしてファイルを追加する際に、誤ってファイルを追加した場合は、プロジェクト、およびディスク上のプロジェクトのフォルダーからそのファイルを削除してから、再度、ファイルをリンク ファイルとして追加してください。

表示: