目录
报错:
分析:
1.代码剔除等级设置
2.什么方式会被剔除
3.解决办法
报错:
FileNotFoundException: Could not load file or assembly 'XXX' or one of its dependencies
at System.AppDomain.Load (System.String assemblyString, System.Security.Policy.Evidence assemblySecurity, System.Boolean refonly) [0x00016] in <9c7b91d55b9d48c5bd518984f8999ef6>:0
at System.AppDomain.Load (System.String assemblyString) [0x00000] in <9c7b91d55b9d48c5bd518984f8999ef6>:0
at (wrapper remoting-invoke-with-check) System.AppDomain.Load(string)
at System.Reflection.Assembly.Load (System.String assemblyString) [0x00005] in <9c7b91d55b9d48c5bd518984f8999ef6>:0
报错原因:unity的代码剔除打开后把我用到的dll剔除了 运行时找不到脚本自然就报错了
分析:
1.代码剔除等级设置
在playersetting->othersetting->managed stripping level 分为三个等级 低中高
Low: 剥离的代码非常少,对于包的大小作用很小。这是unity的il2cpp的默认剥离级别.
Medium:在Low和High中取得平衡,即没有Low那么谨慎,也不会像High那么极端
High: 优先考虑的是包的大小,而不是可用性。对于可用性,是通过辅助的link.xml来进行人为保留需要的库里面的命名空间或者制定的类.
2.什么方式会被剔除
High的剔除等级下:
目前个人测试,如果有明确的引用的dll不会被剔除
只通过反射使用的dll会被剔除掉
3.解决办法
在 工程 Assets 目录下创建link.xml文件把不需要剔除的dll手动加上去
怎么加
就这样加:
<linker>
<assembly fullname="dll名字">
<type fullname="*" preserve="all" />
</assembly>
</linker>