focus-creative-games / hybridclr

HybridCLR是一个特性完整、零成本、高性能、低内存的Unity全平台原生c#热更新解决方案。 HybridCLR is a fully featured, zero-cost, high-performance, low-memory solution for Unity's all-platform native c# hotupdate.
https://code-philosophy.com/
MIT License
6.51k stars 656 forks source link

使用SuperSet模式加载未裁剪的Newtonsoft.Json.dll,不能正确补充元数据 #32

Closed AlanLiu90 closed 1 year ago

AlanLiu90 commented 1 year ago

测试环境:

问题

使用SuperSet模式加载未裁剪的Newtonsoft.Json.dll,后续执行到相关代码时,会有下面的报错:

MissingMethodException: MethodNotFound System.Reflection.Missing::GetTypeFromHandle

当这个dll是拷贝自PackageCache/com.unity.nuget.newtonsoft-json@3.0.2时,无论是来自Runtime内,还是来自Runtime/AOT内,都会导致同样的错误。

当这个dll是拷贝自AssembliesPostIl2CppStrip时,就没问题。

复现工程

一运行,就会有报错: hybridclr_trial.zip

pirunxi commented 1 year ago

感谢。我们马上进行核实和修复。

pirunxi commented 1 year ago

原因已经确定,不是bug,而是因为 原始dll引用了netstandard,导致System.Type类型找不到,而裁剪后的aot dll神奇地变成了.net 4。

关于netstandard不兼容的问题,我们刚刚提交了一个版本解决了此问题。你可以从main分支更到最新试一下。

AlanLiu90 commented 1 year ago

谢谢,合并这个改动后,正常了。