Hololens 2调用Microsoft.MixedReality.QR出现MissingMethodException问题
异常产生原因
- 核心冲突是Unity 2021.2版本默认的WinRT运行时,和Microsoft.MixedReality.QR包依赖的WinRT API版本不兼容。
System.RuntimeType::GetGUID是旧版WinRT互操作层的实现方法,Unity 2021.2更新底层运行时后移除了该方法的内置实现,依赖旧版WinRT的QR包调用时就会触发缺失方法异常。 - 第二个常见诱因是安装的Microsoft.MixedReality.QR包版本和当前Windows SDK、Unity版本不匹配,版本过高或过低都会导致互操作调用失败。
- 第三类原因是Unity项目构建设置中未正确配置UWP的最低目标版本,和HoloLens 2系统运行的版本不匹配也会触发该类运行时异常。
解决方法
- 适配Microsoft.MixedReality.QR包版本:打开Unity包管理器,安装
0.5.2112版本的QR包,该版本已经过验证适配Unity 2021.2系列,不要使用1.x以上的版本,高版本仅支持Unity 2022及更高版本。 - 调整UWP构建设置:
- 打开Unity的文件>生成设置>UWP面板,目标SDK版本设置为
10.0.19041.0,最低版本设置为10.0.18362.0,和你当前的Windows SDK版本匹配。 - 进入玩家设置>发布设置>功能,确保勾选
网络摄像头、互联网(客户端)、图片库、视频库这些QR扫描依赖的权限。
- 修复WinRT互操作配置:
- 在Unity项目Assets目录下新建
link.xml文件,添加如下内容,防止Unity打包时裁剪掉运行时需要的类型:
<linker> <assembly fullname="System.Runtime" preserve="all" /> <assembly fullname="Microsoft.MixedReality.QR" preserve="all" /> </linker>
- 如果完成上述操作后仍报错,打开Unity构建生成的UWP解决方案,右键项目进入属性,把NuGet包
Microsoft.Windows.SDK.Contracts的版本降级到10.0.19041.1,和你系统安装的SDK版本对齐。
- 完成所有配置后重新生成Unity项目,部署到HoloLens 2设备运行测试即可,
QRCodeWatcher.IsSupported()接口可正常返回结果。
内容的提问来源于stack exchange,提问作者Shoejep
相关产品推荐
相关产品推荐

