Windows Phone 8 C# 项目 (MyApp
),从 WP7.1 迁移而来。我已将 native Windows 运行时组件库 (AppLib
) 添加到解决方案,创建了一个引用。其中有一个公开密封的 ref 类 (MyClass
)。 C# 代码中有对它的引用(在主 XAML 页面的 OnLoaded
中)。整个编译 - 意味着正在生成组件的元数据。
当我尝试运行时,项目失败并出现异常或键入 TypeLoadException
并显示以下消息:
Typename or Namespace was not found in metadata file. (Exception from HRESULT: 0x8000000F)
AppLib.DLL 和 AppLib.winmd 都可以在 XAP 中找到。 winmd 包含有关类型的信息,也在正确的命名空间中。我还应该检查什么?
在异常时,AppLib.dll 不在调试器的模块窗口中列出。就好像 DLL 加载由于某种原因失败了。
我已经尝试在任意命名空间中使用全新的类 - 同样的问题。看起来问题出在 DLL 级别,而不是类级别。
最佳答案
WinMD 文件的名称必须是声明任何公共(public)和可激活类型的命名空间名称的前缀。例如,如果您的 WinMD 名为 AppLib.winmd,则您的 MyClass
类型必须在命名空间 AppLib
或嵌套在该命名空间中的其他命名空间中定义,例如 AppLib::Something
。
它还必须在“最佳匹配”WinMD 中声明,因此如果您的类型名为 A.B.MyClass
并且您同时拥有 A.winmd 和 A.B. winmd 在您的包中,类型必须在 A.B.winmd 中定义。
Windows 运行时使用类型的名称来确定哪个 WinMD 文件定义了该类型。另请参阅我对 "XAML cannot find reference in local namespace." 的回答
关于windows-runtime - WP8 : can't consume a native component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13240426/