3

VS2012、C#、XAML、Windows Phone7 アプリ (Win7/VS2010 から移行したばかり)。

WP7 アプリを Win8/VS2012 に移行しました。(以下の問題が間違った DLL を指している可能性があることを示している可能性がある場合に備えて、これについて言及します。) アプリは問題なく移行されました。私は、VS2012 でプロトタイプを作成した追加の非同期処理を追加する過程にあり、VS によって以下が正しくないというフラグが立てられています。

var _Token = await Task.Run(() => (Token)_Serializer.ReadObject(_Response.GetResponseStream()));

VS は、「System.Threading.Tasks.Task には 'Run' の定義が含まれていません」と言っています。WP7 アプリの System.Threading.Tasks の参照は、\packages\Microsoft.Bcl.1.0.16-rc\lib\sl4-windowsphone71\System.Threading.Tasks.dll を指しています。

VS2012 への移行を完了するために、NuGet経由で Microsoft.Bcl.1.0.16-rc を追加しました。これは間違っていましたか?以前は AsyncCtpLibrary_Phone を使用していましたが、Microsoft.Bcl.Async を取得すると次のようなビルド エラーが解決されるとアドバイスされました。

タイプ「System.Threading.Tasks.Task」は、AsyncCtpLibrary_Phone.dll と「c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\WindowsPhone\v8.0\mscorlib.dll」の両方に存在します。Microsoft.Bcl.Async を追加した後、wp7 アプリは正しくビルドされ、実行されました。

Task.Run の問題が発生したのは、VS2012 でプロトタイプを作成した新しい非同期コードを削除しようとした後でした。

app.config には次のエントリが含まれています。

<dependentAssembly bcl:name="System.Threading.Tasks">
    <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.5.11.0" newVersion="1.5.11.0" />
</dependentAssembly>

インストールする必要がある追加のパッケージはありますか?

前もって感謝します、ポール

4

4 に答える 4

16

Microsoft.Bcl.Async では、Async CTP と同様に、RunメソッドはTaskExではなく型にありTaskます。

于 2013-06-26T20:10:27.463 に答える
0

問題は、同じタイプを含む古い非同期 CTP アセンブリへの参照がまだ残っていることだと思います (コンパイラ エラーによる)。これらは VS2010 を使用する場合の正しい参照でしたが、AFAICT では削除する必要があります。

私見、私は次の手順を実行します。

  • Microsoft.Bcl と Microsoft.Bcl.Async を削除します (NuGet を使用しますが、追加しました)。
  • Async CTP ライブラリ (AsyncCtpLibrary*.dll) を削除します。
  • コンパイルで型が見つからないことを確認する
  • NuGet 経由で Microsoft.Bcl.Async を追加する
  • コンパイルが確実に動作するようにする

WP7.1 と 7.5 の違いはわかりませんが、コンパイル エラーで WP8 ref が言及されているので、問題ないと思います。

于 2013-04-01T01:42:22.337 に答える
-1

NuGet の Microsoft.Bcl.Async dll は問題ありません。

問題は、構文がまったく異なることです。使用しないでください:

await Task.Run(() => ...);

あなたはちょうど使用する必要があります:

await Task.Factory.StartNew(() => ...);
于 2013-06-26T19:26:38.877 に答える