locked
Universalアプリで利用可能なビューを持った共有ライブラリプロジェクトを作りたい RRS feed

  • 質問


  • WinRTでユニバーサルなWindows Phone/Windowsストアアプリを開発しています。

    複数のアプリ間でコードを共有したりnugetへの登録も視野に入れて、共有コンポーネントをDLLプロジェクトとして独立させたいのですが、できればMVVMでいうところのView、Pageオブジェクトのxamlなども含めたプロジェクトにできないかと思います。
    具体的に言えば、WebAuthenticationBrokerのように、PageやFrameオブジェクトを渡した状態でメソッドを呼び出すと何らかのページを表示させ設定などを行うUIができないかと考えています。

    現在のユニバーサルアプリプロジェクトでは、既定のテンプレートの場合PCLを利用したライブラリ形式が2種類用意されているのみのようです。
    アプリプロジェクトのような、.SharedプロジェクトやPhone/Storeの作り分けをDLLプロジェクトで行う、もしくはそれを代替する方法はあるのでしょうか?

    ピンポイントに正しい情報であれば、最悪.csprojの書き換えでできるよ、的な英語のエントリーでもかまいません。

    2014年11月4日 4:41

すべての返信

  • > アプリプロジェクトのような、.SharedプロジェクトやPhone/Storeの作り分けをDLLプロジェクトで行う、もしくはそれを代替する方法はあるのでしょうか?

    DLL のプロジェクト (PCL/WinMD) は、Windows/Phone で別々に分けるしかなさそうです。
    しかし、そのコードを共有プロジェクトに置くことは可能になります。

    VS2013 では、有償版に Shared Project Reference Manager を導入すれば可能です (VB を除く)。
    その手順は CodeZine「ユニバーサルWindowsアプリのユニットテスト(後編)」で紹介しましたので、どうぞご覧ください。

    ※ CsTdd08Tests.* プロジェクトが DLL を作るユニバーサルプロジェクトになっている

     
    なお、その記事のコラムにも書きましたが、共有プロジェクトを自由に作成する機能は VS「14」 に標準搭載されるようです (VB も含む)。


    biac [ http://bluewatersoft.cocolog-nifty.com/ ]



    • 編集済み biacMVP 2014年11月4日 6:41 Shared Project Reference Manager の対象を訂正
    • 回答の候補に設定 OD-10ZMVP 2014年11月4日 8:53
    2014年11月4日 5:04
  • biacさん、ご回答ありがとうございます。
    返信が遅くなってしまい申し訳ありません。

    あれこれ試してみたのですが、現状では、アプリそのもののソリューションの外にShared Projectを置くことができないようなので、自分の期待していたような動きをShared Project Reference Managerで実現するのは難しそうです。

    アプリから参照可能な外部のdllもしくはwinmd内のShared Projectが参照できればよいのですが、Shared Project Reference Managerではユニバーサルアプリプロジェクト以外にShared Projectを追加することができませんでした(見逃しがあったらすみません)。

    その後の試行錯誤でPCLのクラスライブラリ(winmdだと一部NG)にPageオブジェクトのxamlを置いてWP/W8プロジェクトから参照、表示できることは確認できたのですが、コード側を切り変える手法が見当たらない(#if WINDOWS_PHONE_APP/WINDOWS_APPは効かない)のでもう少し手法を模索する必要がありそうです。まぁ、あまりここに手間をかけたくないので、VS14待ちをすべき、という気もしてきましたが...。

    引き続き何かよい手段をご存知の方などおられましたらご回答お待ちしております。

    2014年11月8日 14:31
  • biac さんも書かれていますが、一つの dll (PCL) でストアアプリ/Phone 両対応するのではなく、それぞれ別のクラスライブラリとして利用するようにすれば望みの動作になるかと思います。

    クラスライブラリ (Windows Phone) / クラスライブラリ (Windows) / Shared Project (Empty) が含まれるソリューションを作り、両方のクラスライブラリから Shared Project を参照し、クラスライブラリ側のコードは全部削除して Shared Project にコードを置けば #if WINDOWS_APP などが使えます。

    参照するアプリ側はそれぞれの dll を参照します。

    ユニバーサルアプリプロジェクト以外にShared Projectを追加することができませんでした

    という状況が再現できなかったのですが、もし出来なければ最初のソリューション作成時に Shared Project を選択して作り、そのあと各クラスライブラリを追加すればよいと思います。

    2014年11月21日 0:13