赞
踩
一直知道这个 api 会使代码量减少 包体减小,不明白其中的意思。但是今天在打包exe做反射获取类的属性时,用代码时指定类指定了属性的值 ,但是却报错 Property Set Method Not found,字面意思时属性没有Set方法,但是我代码中明明是有Set访问器的 而且我编辑器时可以完成设置属性值的,打包后报错 ,于是查看反汇编打包后的Assembly-CSharp.dll文件,发现其中内容都因为我设置 Managed Stripping Level 为 Medium而使得没有使用到的代码被剪裁,如下图,
再看下我 Unity 编辑器中 的代码 ,
可以看到 我代码没有使用具体类型对象的ProPertyInfo.SetValue 而使用 的是泛型 设置 对象熟悉,导致了属性 Set访问器丢失,而且我代码中对 自定义类的其他属性并没有调用 ,其他属性成员也被 裁剪。所以 需要注意这个api的具体含义 再去使用 。特此纪律 ,文中代码 仅作演示参考 , 如有侵权 请联系
时间:2022.0815
说明:原来项目版本Unity2020.3.20f1c1 ,感觉项目打开太慢于是升级到了Unity2021.3.4f1c1,因为我设置代Unity Managed Stripping Level 为 low,结果一些代码不生效,代码如下
这里工程代码完全一致,BuildSetting 中设置的Managed Stripping Level 也同样时 low,但是却得到了不通的结果
为什么会同样代码同样设置 却一个能够实现 效果一个不行,猜测这部分代码被剪裁,dnspy查看Assembly-CSharp.dll,发现两个脚本位置都没被剪裁(怎么可能,代码用的好好的),那就只可能被Unity剪裁到了代码中用的类的其他类(纯猜测 ),尝试把Unity2021版本的设置成了Disabled(Minimal不行) ,代码可以生效。再来看下官方文档
2020.3的
2021.3的
来看下 2021.3.4 f1c1 不同 Managed Stripping Level 设置的打包dll(同一项目)
具体里面裁剪了什么,或者Unity的目的什么的我不想去猜(水平不够),不过我只想说一些:Unity 官方B站号 一天到晚的打游戏,Gigaya项目 被砍 ,文档都是坑 ,纯 sb引擎
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。