我有一个HTML5应用程序,其中包含一个用于文件系统操作的.winmd组件(例如SQLite、zip档案等)。
在升级到2013.4版本后,这个组件突然停止了工作。虽然Javascript仍然看到所有的类和函数,但是当我尝试调用它们中的任何一个时,都会出现“WinRT:未注册的类”异常。
完全重新安装VS没有帮助。升级到社区版也没有。这种行为在桌面(8.1pro)和笔记本电脑(win8.1单语言)上都可以重现。
我花了2天时间来找出问题所在,发现只要组件包含任何异步活动(如await/async或只是Task.Delay(100)),它就会失败。
我的担心是...出了什么问题?我做错了什么,我能做些什么?
现在正在安装2015预览版。如果我使用系统还原回滚到2013.3版本,项目就正常工作,但VS会变得半破损状态,并且微软网站上没有链接可以下载先前的版本。
如果我说的不清楚,我可以上传一个最简单的VS解决方案文件来重现问题。总之,它很简单:
在升级到2013.4版本后,这个组件突然停止了工作。虽然Javascript仍然看到所有的类和函数,但是当我尝试调用它们中的任何一个时,都会出现“WinRT:未注册的类”异常。
完全重新安装VS没有帮助。升级到社区版也没有。这种行为在桌面(8.1pro)和笔记本电脑(win8.1单语言)上都可以重现。
我花了2天时间来找出问题所在,发现只要组件包含任何异步活动(如await/async或只是Task.Delay(100)),它就会失败。
我的担心是...出了什么问题?我做错了什么,我能做些什么?
现在正在安装2015预览版。如果我使用系统还原回滚到2013.3版本,项目就正常工作,但VS会变得半破损状态,并且微软网站上没有链接可以下载先前的版本。
如果我说的不清楚,我可以上传一个最简单的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安装/Microsoft开发人员哪里出了问题?
DoSomething
的第一行返回。你为什么要返回呢?我偶然发现了这些资源,或许能帮到你: http://stackoverflow.com/questions/12890841/cant-use-create-async-with-wrl-winrt-component?rq=1 http://blogs.msdn.com/b/shawnhar/archive/2014/11/10/wrl-implementations-of-ivector-and-iasyncoperation.aspx - Keenan Lidral-Porter