gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:27:27 58 4
gpt4 key购买 nike

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

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