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

Mirror框架内部类序列化:InternalsVisibleToAttribute权限问题求助

Mirror自定义序列化器内部类访问权限问题解决

问题描述

我正尝试按照Mirror官方文档为自定义类型编写序列化器,想知道是否可以用InternalsVisibleToAttribute将内部类暴露给Mirror程序集,让它能访问我的自定义数据类型和序列化器。

我做了如下尝试:

[assembly:InternalsVisibleTo("Mirror")]
[assembly:InternalsVisibleTo("Mirror.Authenticators")]
[assembly:InternalsVisibleTo("Mirror.CompilerSymbols")]
[assembly:InternalsVisibleTo("Mirror.Components")]
[assembly:InternalsVisibleTo("Mirror.Editor")]
[assembly:InternalsVisibleTo("Mirror.Transports")]
[assembly:InternalsVisibleTo("Unity.Mirror.CodeGen")]

namespace MyNamespace.InternalStuff
{ 
    [Serializable]
    internal class MyInternalClass
    { 
        // ...
    }
}

但一直抛出以下异常:

MethodAccessException: Method `MyNamespace.InternalStuff.MyInternalClassSerializer.WriteItem(Mirror.NetworkWriter,MyNamespace.InternalStuff.MyInternalClass)'
is inaccessible from method `Mirror.GeneratedNetworkCode.InitReadWriters()'

(不清楚该异常所属的程序集)。我之前用同样的方式通过InternalsVisibleToAttribute把这些类暴露给单元测试程序集是成功的。

解决方案

核心原因

你漏掉了对Mirror动态生成的Mirror.GeneratedNetworkCode程序集的可见性授权,而异常里的InitReadWriters()方法正是属于这个程序集。

修复步骤

  1. 在程序集级别的InternalsVisibleTo属性中新增以下行:
[assembly:InternalsVisibleTo("Mirror.GeneratedNetworkCode")]
  1. 确保你的MyInternalClassSerializer类是内部类,并且它的WriteItem、ReadItem等序列化方法为internal修饰符(如果是private则无法被授权访问)。

补充说明

Mirror的代码生成流程会自动创建Mirror.GeneratedNetworkCode程序集,用来存放网络读写逻辑的初始化代码。你的自定义序列化器方法必须被这个程序集访问,才能完成网络数据的序列化注册。之前单元测试成功是因为你正确授权了测试程序集,但没覆盖到这个动态生成的核心程序集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:12:38