如何修复 AOT ExecutionEngineException for GenericEqualityUnity 中

本文关键字:GenericEqualityUnity for ExecutionEngineException 何修复 AOT | 更新日期: 2023-09-27 18:34:01

我正在iOS上制作Unity游戏。我知道 AOT 的限制。当我添加一个恰好具有结构键类型的字典时,我得到了一连串的ExecutionEngineExceptions。其中大多数我可以通过虚拟声明来修复,使其对 AOT 编译器可见:

Dictionary<MyStruct,GameObject> dummy;

但是,最后一个剩余的错误是针对GenericEqualityComparer<MyStruct> 。我不能虚拟声明这一点,因为它在System.Collections.Generic 命名空间中不是公开的。

我尝试了var dummy = EqualityComparer<MyStruct>.Default但没有奏效。

我尝试制作自己的比较器,class StructComparer : EqualityComparer<MyStruct>并在字典构造函数中使用它,但是除了现在从 StructComparer 构造函数调用堆栈中,我得到了同样的错误。

我真的不想将这个结构转换为类。有没有办法解决此错误?

如何修复 AOT ExecutionEngineException for GenericEqualityUnity 中

我相信

这个值类型作为字典键限制解决方法应该是您需要的:

"以新类型手动实现 IEqualityComparer 接口,并向字典 (IEqualityComparer) 构造函数提供该类型的实例。

也就是说,你需要一个实现IEqualityComparer的类,然后将它的实例传递给Dictionary构造函数。

可爱的是,似乎有人做了一个补丁(不确定它是否被合并)来修复 Mono 2.8+ 中的这个 AOT 错误。但是,这对 Unity 用户没有帮助,因为我相信开发人员仍在使用 2.6.5。

相关文章:
  • 没有找到相关文章