gpt4 book ai didi

javascript - 从 Windows 运行时组件调用可移植代码库中的异步方法

转载 作者:行者123 更新时间:2023-11-30 06:54:26 24 4
gpt4 key购买 nike

背景

我正在构建一个可在 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 : error WME1007: Could not resolve reference 'Assembly(Name=System.Threading.Tasks, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)'.

我尝试过的

我已经尝试了很多东西,但可能出现的主要两个是:

  1. 修改 WinRT 组件的 app.Config 以添加程序集的 bindingRedirect。
  2. 通过从它在内部进行的异步调用中取回 Task 对象并对其调用 Wait(),使 PCL 外部调用非异步。 Wait 要么永远不会返回,要么抛出一个神秘的异常。

那么,关于如何实现这一点有什么想法吗?

谢谢,
戴夫·帕克

最佳答案

这是 WinMDExp 的一个已知问题,已在 Visual Studio 2013 中修复。

我们在此页面上提供了解决方法(请参阅第 7 期):http://blogs.msdn.com/b/bclteam/p/asynctargetingpackkb.aspx .

关于javascript - 从 Windows 运行时组件调用可移植代码库中的异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13631939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com