バックグラウンド
Windows 8(ストアアプリとして)とWindows 7(WPFデスクトップアプリとして)の両方で利用できるアプリを構築しています。これらのアプリでは、大量のコンテンツ(約500以上のアプリケーション「ページ」)を閲覧できます。
私はそれらの間でコードの多くを共有することはできませんが、可能な限り共有したいと思います。そこで、.NET 4.5、Silverlight 4+、およびWindows 8を対象としたポータブルコードライブラリ(PCL)を作成しました。Win8アプリはJavaScriptで記述されているため(さまざまな理由で、この質問の一部ではありません)、Windowsもあります。 JavaScriptとPCLの間のプロキシとして機能するランタイムコンポーネント。つまり、JavaScriptからの非同期呼び出しは、最初にWinRTコンポーネントのメソッドを呼び出し、次にPCLの対応するメソッドを呼び出します。
問題
PCLで非同期操作をサポートするために、NuGetを介してMicrosoft.BclおよびMicrosoft.Bcl.Asyncパッケージをインストールしました。これらは、とりわけ、メソッドを非同期化するために必要なTaskクラスとTask <>クラスを検出しますが、それらは独自のアセンブリで実行します。WinRTコンポーネントには、TaskとTask <>がすでに定義されているため、これらのライブラリは必要ありません。問題は、WinRTコンポーネントにコードを追加して、Task <>オブジェクトを返すPCLのAsyncメソッドを呼び出すと、次のビルドエラーが発生することです。
WINMDEXP:エラーWME1007:参照'Assembly(Name = System.Threading.Tasks、Version = 1.5.11.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a)'を解決できませんでした。
私が試したこと
私はたくさんのことを試しましたが、出てくるかもしれない主な2つは次のとおりです。
- WinRTコンポーネントのapp.Configを変更して、アセンブリのbindingRedirectを追加します。
- タスクオブジェクトを内部で行う非同期呼び出しから戻し、Wait()を呼び出すことにより、PCL呼び出しを外部で非同期にします。Waitは、不可解な例外をスローするために戻ることはありません。
それで、これを達成する方法について何か考えはありますか?
ありがとう、
デーブ・パーカー