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 不包含‘运行’的定义。” 我的 WP7 应用程序中 System.Threading.Tasks 的参考指向此位置:\packages\Microsoft.Bcl.1.0.16-rc\lib\sl4-windowsphone71\System.Threading.Tasks.dll

我通过NuGet添加了 Microsoft.Bcl.1.0.16-rc以完成向 VS2012 的迁移。这是不正确的吗?以前我使用的是 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 应用程序正确构建并运行。

只有在尝试删除我在 VS2012 中原型化的新异步代码之后,才出现 Task.Run 问题。

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

上次我检查时,Async CTP 在 Visual Studio 2012 中不起作用,因为它是 Visual Studio 2010 的扩展。恐怕只要你的目标是 Windows Phone 7,你就必须坚持使用 VS 2010。

可能更多有用的信息在这里

于 2013-03-31T19:35:07.963 回答
0

我认为问题在于您仍然对包含相同类型的旧异步 CTP 程序集的引用(根据编译器错误)。这些是使用 VS2010 时的正确参考,但现在需要删除 AFAICT。

恕我直言,我会执行以下步骤:

  • 删除 Microsoft.Bcl 和 Microsoft.Bcl.Async (通过 NuGet,但是您添加了它们)
  • 删除异步 CTP 库 (AsyncCtpLibrary*.dll)
  • 确保编译找不到类型
  • 通过 NuGet 添加 Microsoft.Bcl.Async
  • 确保编译工作

我不明白 WP7.1 vs 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 回答