背景
我正在构建一个可在 Windows 8(作为商店应用程序)和 Windows 7(作为 WPF 桌面应用程序)上使用的应用程序。这些应用程序将允许浏览一堆(大约 500 多个应用程序“页面”)的内容。
虽然我不能在他们之间共享很多代码,但我确实希望尽可能多地共享。因此,我创建了一个针对 .NET 4.5、Silverlight 4+ 和 Windows 8 的便携式代码库 (PCL)。由于 Win 8 应用程序是用 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:无法解析引用“程序集(名称=System.Threading.Tasks,版本=1.5.11.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a)”。
我试过的
我已经尝试了很多东西,但可能出现的主要两个是:
- 修改 WinRT 组件的 app.Config 以为程序集添加 bindingRedirect。
- 通过从内部执行的异步调用中取回 Task 对象并在其上调用 Wait(),使 PCL 调用在外部非异步。等待永远不会返回抛出一个神秘的异常。
那么,关于如何实现这一点的任何想法?
谢谢,
戴夫帕克