javascript - 迁移到 VS2013.4 后调用 WinRT 组件时类未注册异常

标签 javascript c# visual-studio-2013 windows-runtime windows-store-apps

我有一个 HTML5 应用程序,其中包含一个用于文件系统操作(sqlite、zip 存档等)的 .winmd 组件。

在我升级到 2013.4 之后,这个组件突然停止工作了。 Javascript 仍然可以看到所有类和函数,但是当我尝试调用它们中的任何一个时,我得到“WinRT:类未注册”异常。

完整的 VS 重新安装没有帮助。也没有升级到社区版本。此行为在台式机 (8.1pro) 和笔记本电脑 (win8.1 单一语言) 上均重现

我花了 2 天时间试图找出问题所在,我发现一旦组件包含任何异步事件(例如 await/async 或只是 Task.Delay(100)),它就会失败

所以我担心的是……这是怎么回事?我哪里错了,我该怎么办?

现在正在安装 2015 预览版。如果我使用系统还原回滚到 2013.3,项目工作正常,但 VS 处于半损坏状态,并且 MS 网站上没有下载以前版本的链接。

如果我说的没有任何意义,我可能会上传一个包含最简单的 VS 解决方案的文件来重现问题。但简而言之,它很简单:

namespace NSUtil {
  public sealed class Test{
    public static IAsyncOperation<string> DoSomething () {
      return Task<string>.Run(async () => {
        await Task.Delay(100);
        return "";
      }).AsAsyncOperation();
    }
  }
}

一旦我从 javascript 调用 NSUtil.Test.doSomething(),我就会收到 WinRTError: Class not registered 异常。

所以问题是......我/我的电脑/我的 vs 安装/微软开发人员出了什么问题?

最佳答案

答案是:应该在 package.appxmanifest 中放入以下几行:

<Extensions>
  <Extension Category="windows.activatableClass.inProcessServer">
    <InProcessServer>
      <ActivatableClass ActivatableClassId="MyNS.MyClass1" ThreadingModel="both" />
      <ActivatableClass ActivatableClassId="MyNS.MyClass2" ThreadingModel="both" />
      ...
      <ActivatableClass ActivatableClassId="MyNS.MyClassN" ThreadingModel="both" />
    </InProcessServer>
  </Extension>
</Extensions>

其中 MyNS.MyClass{N} 是公开给 WinRT 的所有类。 由于一些奇怪的原因 VS2013.4 不能自己做,所以我不得不自己做

关于javascript - 迁移到 VS2013.4 后调用 WinRT 组件时类未注册异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27023303/

相关文章:

javascript - .show() 在页面加载时不起作用

javascript - 如何从 AngularJS 中的异步树结构 API 创建 promise

javascript - 将函数结果分配给变量与调用内联有什么好处?

c# - 基于 CheckBoxes 过滤 ObservableCollection

c++ - Visual Studio 2013 文档注释

c# - ConfuserEx 使用 Visual Studio 安装程序安装项目时,混淆无法正常工作?

javascript - 将 javascript 变量传递给 Twig

c# - 如何在 javascript 和 ASP.NET 中返回项目的当前域?

c# - 同步调用(通过调度程序)或直接调用的调用

asp.net - 系统未授权访问异常 : Access to the path is denied VS2013