You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity 2017 UWP托管插件构建时Reference Rewriter报错求助

解决Unity 2017 UWP构建时Reference Rewriter报错问题

嘿,我之前在给Unity做UWP蓝牙插件的时候也踩过这个Reference Rewriter的坑,结合你的场景,给你几个实用的解决思路:

  • 正确隔离平台专属插件
    把你的UWP真实插件放在项目的Plugins/WSA目录下,而编辑器用的占位插件放在普通Plugins目录(或者单独创建非UWP的插件目录)。然后在插件的Inspector面板里,给UWP插件只勾选WSAPlayer平台,取消其他平台的勾选。这样Unity会自动在编辑器用占位、UWP构建时用真实插件,避免编辑器加载UWP专属API导致的引用混乱。

  • 调整.NET和UWP构建配置
    虽然你用的是.NET 3.5全基类框架,可以先尝试切换到.NET 4.x Equivalent(Unity 2017支持这个选项),再切回.NET 3.5,有时候能清理程序集引用的缓存问题。另外在UWP构建设置里,把API Compatibility Level设为.NET for UWP,确保Unity正确匹配UWP的API合约版本(你这里是10.0.17134.0)。

  • 用条件编译隔离代码
    在你的插件代码里用条件编译指令,把UWP专属代码和占位代码完全隔离开,比如:

    #if UNITY_WSA && !UNITY_EDITOR
    // 这里写UWP蓝牙通信的真实实现
    using Windows.Devices.Bluetooth;
    public class BluetoothManager : IBluetoothInterface
    {
        // UWP专属逻辑
    }
    #else
    // 编辑器和其他平台的占位实现
    public class BluetoothManager : IBluetoothInterface
    {
        // 空实现或模拟逻辑
    }
    #endif
    

    这样Unity在编辑器里只会编译占位代码,不会触及UWP的API,从根源避免Reference Rewriter处理不兼容的引用。

  • 添加link.xml避免Rewriter误处理
    如果以上方法都不行,就在项目Assets目录下创建一个link.xml文件,告诉Reference Rewriter不要修改你的核心程序集,比如:

    <linker>
        <assembly fullname="Assembly-CSharp" preserve="all"/>
        <assembly fullname="你的UWP插件DLL名称" preserve="all"/>
    </linker>
    

    这个配置能防止Rewriter误删UWP构建所需的必要引用。

  • 检查UWP插件的API引用
    确保你的UWP插件正确引用了Windows.Devices.Bluetooth相关的API合约,并且引用的SDK版本和Unity构建时使用的10.0.17134.0完全一致,不匹配的版本也会导致Rewriter报错。

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:35:31