• 解决在 WP8/ WP8.1 项目中 引用 C++ 组件时出现的 System.TypeLoadException 错误


     本文为个人博客备份文章,原文地址:

    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 自动添加的,而它并没有这么做,所以导致里上述问题的发生,手动添加后即可解决问题。

    提示

    1. 一般情况下,引用 C++ 组件出现问题,请先确保正确引用了 .winmd 文件而不是 .dll 文件;同时要确保 .winmd 和 .dll 文件名一致。

    2. 在 Visual Studio 2013 update 5 中,上述 bug 已经得到修正。

    本博客系备份博客,原博客地址为: http://validvoid.net/
  • 相关阅读:
    python wsdl connection refused 111
    我要学算法
    linux 定时任务
    mysql语句
    Firefox配置Fiddler
    windows下安装spynner
    做一个完整的项目需要技能
    快速排序
    《实时控制软件设计》总结
    asp实现在微信jsdk分享从a页面跳转到b页面然后分享后点开又回a页面
  • 原文地址:https://www.cnblogs.com/validvoid/p/wp-cpp-typeloadexception.html
Copyright © 2020-2023  润新知