Unity 2022.3部署HoloLens 2时找不到WindowsMobile SDK
结论
这类报错通常是因为 Unity 生成的 Visual Studio 工程引用了以下扩展 SDK:
<SDKReference Include="WindowsMobile, Version=10.0.26100.0" />
即使存在 C:\Program Files (x86)\Windows Kits\10\Platforms\UAP\10.0.26100.0,也只能说明核心 UAP Platform 已安装。MSBuild 查找 WindowsMobile Extension SDK 时,通常会访问:
C:\Program Files (x86)\Windows Kits\10\ExtensionSDKs\WindowsMobile\10.0.26100.0\
Windows SDK 10.0.26100.0 是较新的 Windows 11 SDK。Windows Mobile 已停止维护,这个 SDK 可能没有提供同版本的 WindowsMobile 扩展,于是会出现 UAP 目录存在、WindowsMobile SDK 仍然找不到的情况。
通常无须额外设置环境变量。可以安装一个包含 WindowsMobile Extension SDK 的较早版本,例如 10.0.22621.0 或 10.0.19041.0,再让 Unity 使用该版本重新生成工程。具体选择哪个版本,应以本机 ExtensionSDKs\WindowsMobile 目录中的实际内容为准。
先检查缺少的是哪一部分
在 Developer Command Prompt for VS 2022 或普通命令提示符中执行:
dir "%ProgramFiles(x86)%\Windows Kits\10\Platforms\UAP"
dir "%ProgramFiles(x86)%\Windows Kits\10\ExtensionSDKs\WindowsMobile"
如果第一条命令能看到:
10.0.26100.0
而第二条命令中没有:
10.0.26100.0
说明缺少的是 WindowsMobile Extension SDK,UAP Platform SDK 已经存在。
还可以检查扩展 SDK 的清单文件:
dir "%ProgramFiles(x86)%\Windows Kits\10\ExtensionSDKs\WindowsMobile\10.0.26100.0\SDKManifest.xml"
如果该目录或 SDKManifest.xml 不存在,MSBuild 就无法解析:
WindowsMobile, Version=10.0.26100.0
复制或新建一个同名空目录没有作用。
推荐解决步骤
1. 安装较早的 Windows SDK
打开 Visual Studio Installer,选择 Visual Studio 2022 的“修改”,进入“单个组件”,安装一个可供 Unity 2022.3 和 HoloLens 2 工程使用的较早 Windows SDK。
可以先检查以下版本:
Windows 11 SDK (10.0.22621.0)
Windows 10 SDK (10.0.19041.0)
安装后确认对应的扩展目录存在:
dir "%ProgramFiles(x86)%\Windows Kits\10\ExtensionSDKs\WindowsMobile\10.0.22621.0"
dir "%ProgramFiles(x86)%\Windows Kits\10\ExtensionSDKs\WindowsMobile\10.0.19041.0"
不同安装介质提供的组件可能不同。Visual Studio Installer 中勾选了 SDK,并不能保证相应的扩展已经安装。请直接检查 ExtensionSDKs\WindowsMobile 下的版本目录和 SDKManifest.xml。
2. 在 Unity 中选择实际存在的 Target SDK
进入:
Edit
> Project Settings
> Player
> Universal Windows Platform
> Publishing Settings
将 Target SDK Version 从 Latest installed 改为明确的版本,例如:
10.0.22621.0
也可以选择本机其他带有 WindowsMobile 扩展的版本。
不要继续使用 Latest installed。如果机器上同时装有 10.0.26100.0,Unity 可能再次将它选为目标版本,并生成无效的 WindowsMobile, Version=10.0.26100.0 引用。
Minimum Platform Version 应根据项目使用的 OpenXR、MRTK 和 HoloLens OS 版本设置,不要为了处理这个报错随意调高。这个选项与 MSBuild 能否找到 WindowsMobile Extension SDK 无关。
3. 删除旧工程并重新生成
修改 Target SDK 后,重新生成整个 Visual Studio 工程。旧 .sln、.vcxproj 或 .csproj 文件中可能还保留着 10.0.26100.0。
关闭 Unity 和 Visual Studio,删除原来的 UWP 导出目录,再从 Unity 重新执行 Build。
生成新工程后,可以搜索是否还有旧引用:
findstr /S /I /N "WindowsMobile 10.0.26100.0" *.vcxproj *.csproj *.props *.targets *.appxmanifest
如果仍能找到类似内容:
<SDKReference Include="WindowsMobile, Version=10.0.26100.0" />
说明某个 Unity 插件、模板文件或构建脚本仍在写入这个版本。此时应在项目中查找引用来源,单独修改生成后的工程无法彻底解决问题。
在 PowerShell 中可使用:
Get-ChildItem -Recurse -File |
Select-String -Pattern 'WindowsMobile|10\.0\.26100\.0'
重点检查:
Assets\
Packages\
ProjectSettings\
还要检查自定义的 .props、.targets、.csproj、.vcxproj 模板以及 post-build 脚本。
临时验证方法
可以临时编辑生成的工程,把:
<SDKReference Include="WindowsMobile, Version=10.0.26100.0" />
改为机器上实际存在的版本,例如:
<SDKReference Include="WindowsMobile, Version=10.0.22621.0" />
然后重新加载并构建解决方案。
如果修改后能通过 SDK 解析阶段,基本可以确认问题来自版本不匹配。这种修改只适合验证,Unity 下次导出时会将它覆盖。正式修复应落实到 Unity 的 Target SDK 设置、插件配置或工程生成脚本中。
如果项目完全没有使用 Windows Mobile 扩展 API,也可以暂时删除该 SDKReference 进行排查。但这种方法不能作为通用修复方案,因为某些 Unity 版本、插件或生成代码可能依赖该扩展,删除后可能出现新的编译错误。
为什么重装最新版 SDK 没有效果
MSBuild 解析 SDKReference 时,会同时匹配 SDK 名称和完整版本号:
WindowsMobile + 10.0.26100.0
以下三种安装状态各不相同:
UAP 10.0.26100.0 已安装
WindowsMobile 10.0.19041.0 已安装
WindowsMobile 10.0.26100.0 已安装
工程要求第三项时,前两项无法自动替代。反复修复 Visual Studio 或重新安装最新版 SDK,通常也不会得到新版 SDK 已经不再提供的旧平台扩展。
是否需要配置环境变量
正常安装时,无须手动设置 WindowsSdkDir、WindowsSDKVersion 或修改 PATH。Visual Studio 和 MSBuild 会通过标准安装位置、注册信息以及 SDKManifest.xml 解析 SDK。
设置环境变量也无法把:
Platforms\UAP\10.0.26100.0
变成:
ExtensionSDKs\WindowsMobile\10.0.26100.0
只有 Windows SDK 安装在非标准位置、注册信息损坏,或构建运行在特殊 CI 环境中时,才需要继续排查 SDK 路径。当前错误已经明确指向 WindowsMobile,应先确认对应的 Extension SDK 是否存在。
还需要注意的事项
- Windows 11 SDK 仍然安装在
C:\Program Files (x86)\Windows Kits\10,路径不会改成Windows Kits\11。因此,目录中出现10.0.26100.0,不代表它是传统意义上的 Windows 10 Mobile SDK。 - 不建议从其他电脑手动复制整个
WindowsMobile目录。SDK 还依赖清单、引用程序集和安装注册信息,直接复制容易留下不完整的构建环境。 - 修改 SDK 版本后,需要重新导出 Unity 工程。仅在 Visual Studio 中执行 Clean 和 Rebuild 不够。
- 如果 Unity 仍然生成
10.0.26100.0,检查Target SDK Version是否还设为Latest installed,并确认 MRTK、OpenXR 或自定义构建脚本有没有覆盖 Player Settings。 - 解决 SDK 解析问题后,部署 HoloLens 2 时还要确认构建架构为
ARM64,配置通常为Release或Master,设备也需要启用 Developer Mode 和 Device Portal。这些设置不会引发当前的Could not find SDK错误,但会影响后续部署。
备注:内容仅供参考。
