Unity构建HoloLens 2应用报Handedness歧义引用编译错误求助
HoloLens 2 MRTK应用构建失败(CS0104 Handedness歧义错误)解决方案
问题表现
- Unity编辑器播放模式下全功能运行正常,MRTK官方示例场景在播放模式下也无异常
- 执行应用构建操作时直接失败,无法部署到HoloLens 2设备
- 已通过MixedRealityFeatureTool更新MRTK版本,按照官方配置流程完成环境搭建,故障未解决
报错日志
Library\PackageCache\com.microsoft.mixedreality.toolkit.foundation@251fc689f36f\Providers\WindowsMixedReality\XRSDK\WindowsMixedRealityDeviceManager.cs(404,128): error CS0104: 'Handedness' is an ambiguous reference between 'Microsoft.MixedReality.Input.Handedness' and 'Microsoft.MixedReality.Toolkit.Utilities.Handedness'
Error building Player because scripts had compiler errors
UnityEditor.BuildPlayerWindow+BuildMethodException: 2 errors at UnityEditor.BuildPlayerWindow+DefaultBuildMethods.BuildPlayer (UnityEditor.BuildPlayerOptions options) [0x002da] in <1135c66e5f4c41a7831fa5798849d8b6>:0 at UnityEditor.BuildPlayerWindow.CallBuildMethods (System.Boolean askForBuildLocation, UnityEditor.BuildOptions defaultBuildOptions) [0x00080] in <1135c66e5f4c41a7831fa5798849d8b6>:0 UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
根因说明
编辑器播放模式仅做增量脚本编译,不会校验目标平台专属脚本的命名空间冲突;构建时会全量编译UWP/HoloLens平台相关所有脚本,此时两个不同命名空间下的同名Handedness枚举同时被引入,触发CS0104歧义错误。冲突来源是项目同时安装了旧版独立Windows Mixed Reality输入包,与MRTK Foundation内置的Handedness枚举定义重名。
修复步骤
- 优先方案(无侵入,推荐)
- 打开Unity Package Manager,在已安装包列表中找到独立的
Microsoft Windows Mixed Reality Input包(包名通常为com.microsoft.windows.mixedreality.input),执行卸载操作。MRTK Foundation包已经内置WMR平台输入适配逻辑,无需额外安装旧版独立输入包。 - 关闭Unity编辑器,删除项目根目录下的
Library文件夹,重新打开项目等待资源全量导入完成。 - 重新执行构建操作即可。
- 打开Unity Package Manager,在已安装包列表中找到独立的
- 临时修复方案(无法卸载冲突包时使用)
- 在Project窗口定位到报错路径下的
WindowsMixedRealityDeviceManager.cs文件。 - 跳转至文件第404行,将该行未指定命名空间的
Handedness引用,替换为带完整命名空间的Microsoft.MixedReality.Toolkit.Utilities.Handedness。 - 等待脚本重新编译完成后再执行构建。
- 在Project窗口定位到报错路径下的
- 校验项
打开Player Settings -> Other Settings -> Scripting Define Symbols,检查是否同时存在旧版WMR输入相关的宏定义(如WMR_LEGACY_INPUT),若存在则删除,保存设置后重启Unity。
注意:直接修改PackageCache目录下的包源码属于临时方案,后续更新MRTK版本时修改会被覆盖,优先采用清理冲突依赖的方式修复。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

