本文为个人博客备份文章,原文地址:
http://validvoid.net/wp-cpp-typeloadexception/
使用 Visual Studio 2013 update 4 在 WP8/ WP8.1 项目引用 C++ 组件如果遭遇到
System.TypeLoadException: Requested Windows Runtime type 'XXXXX.XXXXX' is not registered.
这一错误,是由于 Visual Studio 2013 update 4 的一个 bug 导致引用 C++ 组件后没有正常为 C++ 在应用的清单文件中进行注册。该问题可以通过两种方法解决。
第一种方法,暴力替换 update 4 版中的如下文件为 update 3 版本:
* Microsoft.AppxPackage.Targets
* Microsoft.Build.AppxPackage.dll
文件路径
C:Program Files (x86)MSBuildMicrosoftVisualStudiov12.0AppxPackage
然而并不推荐这么做,谁也不知道替换之后还会出现什么 bug(s)。
第二种方法,也就是目前的正确姿势是修改应用的清单文件:
在应用的清单文件 (Package.appxmanifest)
中末尾的 </Package>
节点前加入如下配置代码:
<Extensions> <Extension Category="windows.activatableClass.inProcessServer"> <InProcessServer> <Path>AAA.dll</Path> <ActivatableClass ActivatableClassId="AAA.BBB" ThreadingModel="both" /> </InProcessServer> </Extension> </Extensions>
其中,AAA.dll
为 C++ 组件的 .dll 文件名;AAA.BBB 为报错信息中提示的未注册的类型名称。
原本以上这段配置应该是 VS 自动添加的,而它并没有这么做,所以导致里上述问题的发生,手动添加后即可解决问题。
提示
-
一般情况下,引用 C++ 组件出现问题,请先确保正确引用了 .winmd 文件而不是 .dll 文件;同时要确保 .winmd 和 .dll 文件名一致。
-
在 Visual Studio 2013 update 5 中,上述 bug 已经得到修正。