0

我有一个针对 Windows-10 桌面平台的 C# 应用程序。C# 应用程序调用用 C++ 编写的本机组件。我的本机 C++ 代码具有 Visual C++ 组件扩展 (C++/CX)。
我正在尝试为我的应用程序运行 WACK 测试,我看到了这个错误:

发现错误:常规元数据正确性测试检测到以下错误:yyy.winmd中的重载方法XXX具有相同数量的 in 参数,但没有一个具有 DefaultOverloadAttribute 的参数。如果未修复,则恰好一种方法重载必须具有 DefaultOverloadAttribute 影响: Windows 应用商店不允许未通过 Windows 运行时元数据验证的应用。 如何修复:请确保您用于生成 Windows 运行时类型的编译器是最新的,符合 Windows 运行时规范

这曾经与 VS-2015 Update 2 一起正常工作。我今天安装了 VS-2015 Update-3,从那时起我看到了这个失败。 奇怪的是,错误报告
中提到的重载方法根本没有重载。 我已经检查了这个MSDN 页面,但找不到任何解决方案。 我的VS详情如下:

MS VS Professional 2015
版本 14.0.25425.01 更新 3
MS .NET Framework
版本 4.6.01038

我在任何地方都找不到任何 Windows 运行时规范。安装 VS Update-3 后我还需要什么额外的东西吗?

4

1 回答 1

1

这似乎是一个 VS 编译器问题。基本上 WACK 工具抱怨任何用户定义的方法名称“关闭


只要用户定义的 ref 类具有显式析构函数,编译器就会添加一个IClosable实现。然后它将析构函数映射到“ IClosable::Close ”方法。但是编译器并没有抱怨名为“ Close ”的用户定义方法。


在进一步挖掘中,我发现SQLite似乎也有类似的问题。这正是我遇到的问题。
这是SQLite 采用 的解决方案。
查看 SQLite 解决方案后,我将方法名称从“ Close ”修改为“ Closedb ”,现在我的 WACK 测试通过了。
截至本文发布时,此问题的唯一解决方案似乎在您的代码中没有名为“ Close ”的方法。

于 2016-09-06T23:37:31.470 回答