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

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

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

全VS重新安装没有帮助.升级到社区版本也没有.这种行为在桌面(8.1pro)和笔记本电脑(win8.1单一语言)

我花了2天试图弄清楚出了什么问题,我发现一旦组件包含任何异步活动(如等待/异步或只是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未注册的异常.

所以问题是….我/我的PC /我的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不会自己做,所以我必须自己做

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...