4

在使用 Microsoft.Bcl“Microsoft BCL Portability Pack”时,我无法在 MvvmCross Windows Phone 7.1 项目中使用 await 关键字。

我已经在 GitHub 上发布了我在下面描述的示例项目的代码,并且在这一行发生了 await 错误

当我尝试构建包含 FirstViewModel 的第三个“核心”Windows 可移植类库 (PCL) 时,出现以下错误:

Type System.Threading.Tasks.Task<string> not awaitable under VS red squiggles, and
Cannot await 'System.Threading.Tasks.Task<string>' when building.

解决方案中有四个项目:

  1. 一个 Windows 可移植类库 (PCL),其中有一个接口,该接口引用 BCL 提供的“任务”对象。

  2. 一个面向 OS 7.1 的 Windows Phone 类库,它实现了上述接口并使用 BCL 中的“任务”。

  3. 另一个提供应用程序“核心”功能的 Windows 可移植类库 (PCL),包括 ViewModel。

  4. 尝试引用和使用上述 DLL 的 Windows Phone 7.1/“7.5”应用程序。

包含接口和接口实现的前两个项目编译没有任何错误。但是第 3 个“核心”PCL 无法构建并出现上面显示的错误。

如果您想要更多详细信息:

  • 我尝试了这个 App.config “修复”,如“已知 BCL 问题”中所述:http: //blogs.msdn.com/b/bclteam/p/asynctargetingpackkb.aspx。但是当我添加时没有解决错误App.config 只是“核心”项目,也不是当我尝试将相同的 App.config 添加到每个项目时。可能是我没有在元素中使用正确的版本,或者我只是错误地执行了 App.config 的内容。

  • 解决方案中设置为以 PCL 为目标的每个项目在 Visual Studio 中都设置为“Profile104”。

这些 DLL 位于:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.0\Profile\Profile104\
  • 此 PCL 配置文件在 Visual Studio 项目属性中显示为针对以下平台:适用于 Windows 应用商店应用的 .NET、.NET 4.5、Silverlight 4+ 和 Windows 7.5+

  • 解决方案中的每个项目还通过 NuGet 引用了 Microsoft.Bcl“Microsoft BCL Portability Pack”。

  • 所有四个项目都使用 MvvmCross (Mvx)。

  • 此示例中的所有项目都未尝试针对与 Xamarin Droid/iOS 堆栈相关的任何内容。它是所有 Windows 并且仍然在 await 关键字上失败。

  • 带有接口的 PCL 和 Windows Phone 类库都使用 Mvx CrossCore NuGet 包,并设置为作为“Mvx 插件”使用。

  • “核心”PCL 使用完整的 MvvmCross NuGet 包并包含发生等待错误的 FirstViewModel。

  • Windows Phone App 项目也引用了完整的 MvvmCross,其中包含 Windows Phone 特定的 Mvx 文件。

  • 如前所述,请参阅 GitHub 上的失败示例代码

4

1 回答 1

12

您需要添加Microsoft.Bcl.AsyncNuGet 包。

这些包以前在非 Microsoft 平台上不可用,但作为 Xamarin 协作的一部分,Microsoft重新授权它们以在所有平台下可用。

于 2013-08-22T01:44:35.210 回答