3

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

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

在元数据文件中找不到类型名称或命名空间。(来自 HRESULT 的异常:0x8000000F)

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

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

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

4

1 回答 1

4

WinMD 文件的名称必须是声明任何公共和可激活类型的命名空间名称的前缀。例如,如果您的 WinMD 名为AppLib.winmd,则您的MyClass类型必须在命名空间AppLib或嵌套在该命名空间内的其他命名空间中定义,例如AppLib::Something.

它还必须在“最佳匹配”WinMD 中声明,因此如果您的类型已命名A.B.MyClass并且您的包中同时包含A.winmdABwinmd,则该类型必须在ABwinmd中定义。

Windows 运行时使用类型的名称来确定哪个 WinMD 文件定义了该类型。另请参阅我对“XAML 无法在本地命名空间中找到引用”的回答。

于 2012-11-05T21:38:09.727 回答