Unity HoloLens2项目添加包后遇System.Web.HttpUtility缺失错误求助
问题:HoloLens 2 Unity AR项目添加QR定位包后无法运行,出现System.Web相关引用错误
问题描述
原本部署正常的HoloLens 2 Unity 3D AR项目,添加一款用于空间定位QR码的包后,出现以下问题:
- 构建成功但项目无法在设备上运行
- HoloLens未弹出相机权限请求,无任何反应
- 共出现15个编译错误,核心为
System.Web.HttpUtility相关类型/方法在目标框架中不存在的引用错误
错误日志示例
Reference rewriter: Error: type `System.Web.HttpUtility` doesn't exist in target framework. It is referenced from RestSharp.dll at System.String RestSharp.Extensions.StringExtensions::HtmlDecode(System.String). UnityEngine.Debug:LogError (object) PostProcessWinRT:RunReferenceRewriter () (at C:/buildslave/unity/build/PlatformDependent/MetroPlayer/Extensions/Managed/PostProcessWinRT.cs:1219) PostProcessWinRT:Process () (at C:/buildslave/unity/build/PlatformDependent/MetroPlayer/Extensions/Managed/PostProcessWinRT.cs:209) UnityEngine.GUIUtility:ProcessEvent (int,intptr) Reference rewriter: Error: method `System.String System.Web.HttpUtility::HtmlDecode(System.String)` doesn't exist in target framework. It is referenced from RestSharp.dll at System.String RestSharp.Extensions.StringExtensions::HtmlDecode(System.String). UnityEngine.Debug:LogError (object) PostProcessWinRT:RunReferenceRewriter () (at C:/buildslave/unity/build/PlatformDependent/MetroPlayer/Extensions/Managed/PostProcessWinRT.cs:1219) PostProcessWinRT:Process () (at C:/buildslave/unity/build/PlatformDependent/MetroPlayer/Extensions/Managed/PostProcessWinRT.cs:209) UnityEngine.GUIUtility:ProcessEvent (int,intptr) Reference rewriter: Error: method `System.Collections.Specialized.NameValueCollection System.Web.HttpUtility::ParseQueryString(System.String)` doesn't exist in target framework. It is referenced from RestSharp.dll at RestSharp.Authenticators.OAuth.OAuthWebQueryInfo RestSharp.Authenticators.OAuth.OAuthWorkflow::BuildProtectedResourceInfo(System.String,RestSharp.Authenticators.OAuth.WebParameterCollection,System.String). UnityEngine.Debug:LogError (object) PostProcessWinRT:RunReferenceRewriter () (at C:/buildslave/unity/build/PlatformDependent/MetroPlayer/Extensions/Managed/PostProcessWinRT.cs:1219) PostProcessWinRT:Process () (at C:/buildslave/unity/build/PlatformDependent/MetroPlayer/Extensions/Managed/PostProcessWinRT.cs:209) UnityEngine.GUIUtility:ProcessEvent (int,intptr)
已尝试的无效解决方案
- 将API兼容性从.NET 4.x改为.NET Standard 2.0:导致更严重错误,无法完成构建
- 添加
csc.rps文件并写入-r:System.Web.dll:无效果 - 修改
csc.rps文件内容:无变化
当前环境
- Unity版本:2019.4.24f1(无法更换)
- Unity构建设置:ARM64、D3D
- 部署方式:Visual Studio 2019,以Master、ARM64、Device模式部署到HoloLens 2
解决方案
1. 处理RestSharp的UWP兼容问题
错误根源是新增包引入的RestSharp.dll依赖了仅属于.NET Framework桌面类库的System.Web.HttpUtility,而HoloLens使用的UWP框架不包含该类库:
- 若项目实际未用到RestSharp的OAuth或HTML解码功能,直接删除项目中的RestSharp.dll文件
- 若必须保留RestSharp,替换为针对.NET Standard 2.0编译、移除了System.Web依赖的版本(需适配Unity 2019.4的兼容要求)
2. 通过link.xml跳过无效引用检查
保持API兼容性为**.NET 4.x**,在Unity项目根目录创建link.xml文件,添加以下内容,指导Unity的引用重写器忽略System.Web相关的缺失引用:
<linker> <assembly fullname="RestSharp"> <type fullname="RestSharp.Extensions.StringExtensions" preserve="all"/> <type fullname="RestSharp.Authenticators.OAuth.OAuthWorkflow" preserve="all"/> </assembly> <assembly fullname="System.Web" ignore="true"/> </linker>
3. 修复相机权限配置
项目无法弹出相机权限请求,大概率是权限配置被新增包覆盖:
- 打开Unity的
Player Settings→Publishing Settings→Capabilities,确保勾选Webcam权限 - 构建后在Visual Studio项目中打开
Package.appxmanifest,确认包含以下权限声明:
<DeviceCapability Name="webcam"/>
4. 清理缓存后重新构建
- 删除Unity项目的
Library、Temp文件夹,清理本地缓存 - 在Visual Studio中执行Clean Solution,再重新生成并部署项目
内容的提问来源于stack exchange,提问作者user168356
相关产品推荐
相关产品推荐

