我有一个针对Windows-10桌面平台的c#应用程序。c#应用程序调用用c++编写的本地组件。我的本地c++代码有Visual c++组件扩展(c++/CX)。
我正在尝试为我的应用程序运行WACK测试& &;我看到这个错误:
Error Found:常规元数据正确性测试检测到以下错误:在yyy中重载方法XXX。winmd具有相同数量的in参数,但没有一个具有DefaultOverloadAttribute。只有一个方法重载必须具有DefaultOverloadAttribute
影响: Windows store不允许未通过Windows运行时元数据验证的应用程序。
如何修复:请确保你用来生成Windows运行时类型的编译器是最新的Windows运行时规范
这曾经在VS-2015 Update 2中工作得很好。我今天安装了VS-2015 Update-3。从那时起,我看到了这个失败。
奇怪的是,在错误报告中提到的重载方法根本没有重载。
我已经检查了这个MSDN页面,但找不到任何解决方案。
我的VS细节如下:
MS VS Professional 2015
版本14.0.25425.01更新3
MS .NET框架
版本4.6.01038
我找不到任何Windows运行时规格。
这似乎是VS编译器的问题。基本上WACK工具会抱怨任何用户定义的方法名"Close"
每当用户定义的ref类有显式析构函数时,编译器就添加一个IClosable实现。然后将析构函数映射到"IClosable::Close"方法。但是编译器不会抱怨用户定义的名为"Close"的方法。
进一步挖掘,我发现SQLite似乎也有类似的问题。这也正是我想说的问题。
这是SQLite采用的解决方案。查看完SQLite解决方案后,我将方法名称从"Close"修改为"Closedb",现在我的WACK测试通过了。
在这个帖子中,这个问题的唯一解决方案似乎不是在你的代码中有一个名为"Close"的方法。