从WP7.1迁移的Windows Phone 8 C#项目(MyApp)。我已将本地Windows运行时组件库(AppLib)添加到解决方案,并创建了引用。其中有一个公共的密封引用类(MyClass)。 C#代码(在XAML主页面的OnLoaded中)有对它的引用。整个过程都会编译-意味着正在生成组件的元数据。

当我尝试运行时,该项目失败,出现异常或输入以下消息,并键入TypeLoadException


在元数据文件中找不到Typename或Namespace。 (来自HRESULT的异常:0x8000000F)


可以在XAP中找到AppLib.DLL和AppLib.winmd。 winmd在正确的名称空间中也包含有关类型的信息。我还应该检查什么?

在例外时,调试器的模块窗口中未列出AppLib.dll。好像DLL加载由于某种原因而失败。

我尝试在任意名称空间中使用全新的类-同样的问题。看起来问题出在DLL级别,而不是类级别。

最佳答案

WinMD文件的名称必须是在其中声明任何公共类型和可激活类型的名称空间名称的前缀。例如,如果您的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:不能使用 native 组件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13240426/

10-11 03:02