windows-runtime - WP8 : can't consume a native component

标签 windows-runtime windows-phone-8

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.winmdA.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/

相关文章:

windows-8 - 将下拉菜单添加到 Windows 8 Metro 中的设置 super 按钮 (C#)

c# - 无法将类型 'System.Attribute' 转换为泛型参数 'T' - 为什么?

c# - win 8 metro app c# 多项目模板

visual-studio-2012 - CurrentAppSimulator 不可用于测试应用内购买

c# - 如何将字符串从托管 C#/Xaml WP8 组件传递到 D3D 组件?

windows-phone-8 - Windows Mobile "Scan the app for malware"

wpf - 正确的 MVVM 设计模式 - ViewModel 和 DataContext

interop - 为什么 WinRT 类型必须密封?

c# - 将 UWP 库加载到 .NET Framework 应用中

visual-studio - 无法创建虚拟机