PAYATHON 2026

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 错误,但会影响后续部署。

备注:内容仅供参考。