【无标题】

一、最常见、几乎必中招的库(高危)

  1. Newtonsoft.Json(Json.NET)
    触发点:JsonConvert.DeserializeObject(json)、动态解析、dynamic、某些 ContractResolver
    现象:WebGL/IL2CPP 直接爆 LightLambda 空指针
    替代:Unity.JsonUtility/ System.Text.Json(AOT 兼容版)
  2. 任何用了 dynamic 关键字的代码 / 库
    触发点:dynamic obj = ...;、动态访问属性、动态转换
    现象:IL2CPP 下必崩,Mono 没事
    替代:全改成静态类型、用反射 / 字典替代 dynamic
  3. 各类 ORM 数据库库(全灭)
    SqlSugar、FreeSql、EntityFramework/EF Core、Dapper(部分版本)
    触发点:表达式树查询 Where(x=>x.Id==1)、动态映射、编译 lambda
    替代:手写 SQL + 静态实体,或者直接不用 ORM
  4. AutoMapper(自动映射)
    触发点:Mapper.Map(obj),内部大量表达式树编译
    现象:WebGL / 移动端 IL2CPP 必崩
    替代:手动映射、静态映射表
    二、网络 / 序列化 / 解析类库(高频踩坑)
  5. 带 "动态解析 / 表达式" 的 JSON/XML/YAML 库
    Jil、ServiceStack.Text、YamlDotNet(动态版本)、LitJson(部分)
    触发点:动态反序列化、object/dynamic 解析
    替代:Unity.JsonUtility、System.Text.Json、纯静态解析
  6. 消息队列 / 网络回调库
    某些 MQTT、WebSocket、RPC 库用了动态委托 / 表达式树
    例如:旧版 BestHTTP、某些自定义网络框架的动态回调
    替代:用 Unity 官方网络 API + 静态回调
  7. XLua / ToLua / 其他 Lua 绑定(特定用法)
    触发点:C# 侧用表达式树 /dynamic 调用 Lua、动态生成绑定
    替代:纯静态绑定、不用 dynamic
    三、MVVM/UI 绑定 / 事件库(容易忽略)
  8. MVVM 框架
    Prism、MVVM Light、UniRx(部分动态用法)、ReactiveProperty(旧版)
    触发点:动态绑定、表达式树订阅、WhenAny 类 API
    替代:纯事件、手动绑定、静态 Reactive 实现
  9. 任何封装了 "动态委托工厂" 的工具库
    比如:自己写的或第三方的 DelegateBuilder、FastInvoker、ExpressionCompiler
    特征:代码里有 Expression.Lambda().Compile()
    替代:反射缓存、静态委托、直接调用
    四、C# 语言特性本身(不是库,但必禁)
  10. 直接用 System.Linq.Expressions 写的代码
    csharp
    运行
    // 以下代码 WebGL 必崩
    Expression<Func> expr = () => 1;
    var func = expr.Compile(); // LightLambda 崩溃点
  11. 泛型 + 动态类型组合
    csharp
    运行
    void Foo(dynamic value) { ... } // IL2CPP 必崩
    五、一句话快速自查清单(你现在就能用)
    在你的项目里全局搜索这些关键词,出现任意一个就可能崩:
    JsonConvert
    dynamic
    Expression<
    .Compile()
    AutoMapper
    SqlSugar / FreeSql / EF
    Where(x => (表达式树查询)
    六、最稳的 WebGL 安全三原则
    不用 Newtonsoft.Json,换 JsonUtility 或 System.Text.Json
    禁用所有 dynamic,全用静态类型
    删除所有 Expression.Lambda().Compile() 代码

NullReferenceException: Object reference not set to an instance of an object.

at System.Linq.Expressions.Interpreter.LightLambda.MakeRunDelegateCtor (System.Type delegateType) 0x00000 in <00000000000000000000000000000000>:0

at

相关推荐
Aman19848 小时前
Claude Code做Unity项目移植(二): 自动执行只读操作,告别频繁的
unity·游戏开发·vibe coding·claude code
总要学点什么9 小时前
第89篇:三维特效-螺旋圆效果——让螺旋臂卷起一圈圈外扩的涟漪
开发语言·javascript·ecmascript·webgl·cesium·空间分析·1024程序员节
暴走约伯17 小时前
【VFX工具链源码拆解 02】告别机械劳动(上):一键统改百个子粒子颜色与批量重命名
3d·unity·c#·材质
郝学胜-神的一滴18 小时前
游戏设计:原型与开发 18:Unity入门的第一课
人工智能·程序人生·游戏·ui·unity·游戏引擎
淡海水20 小时前
09-01-内存-Unity资源生命周期全景
unity·c#·游戏引擎·.netcore·gc
GoldenSpider.AI1 天前
一张户型图做成浏览器 3D 漫游:house.json 统一模型、1.2 m 剖切图纸与分阶段验收
ai编程·webgl·three.js·3d漫游·claude code
LF男男1 天前
Flower Defense—UIFacade
unity
呆呆敲代码的小Y1 天前
【实战精选面试题】Unity精选面试题详细解答,按模块整理汇总
人工智能·游戏·unity·游戏引擎
小贺儿开发1 天前
《流光绘忆》Unity 沉浸式光影互动
科技·unity·ai·程序员·工具·互动·光影
Aman19842 天前
Claude Code做Unity项目移植(一):从零散工具到团队式
unity·游戏开发·vibe coding·claude code·项目迁移