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