我有一个 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/