如何强制Monotouch AOT编译器查看嵌套的泛型方法?

25

我不得不克服一些困难,但我几乎已经成功将 ServiceStack Monotouch 上的iOS项目中运行。一个 JIT 运行时异常仍然存在:

System.ExecutionEngineException: Attempting to JIT compile method 'ServiceStack.Text.Json.JsonTypeSerializer:GetWriteFn<int> ()' while running with --aot-only. 

有问题的代码非常简单:

   internal WriteObjectDelegate GetWriteFn<T>()
    {
        return JsonWriter<T>.WriteFn();
    }
作为一个测试,我修改了 SS 代码使其内部方法和类型为公共的,并在我的项目启动代码中包含了以下内容(以实际调用)。

作为一个测试,我将 SS 代码进行了修改,将内部方法和类型设为公共,并将以下内容加入到我的项目启动代码中(以便实际调用)。

var ick = ServiceStack.Text.Json.JsonWriter<int>.WriteFn();
var erk = ServiceStack.Text.Json.JsonTypeSerializer.Instance.GetWriteFn<int>();

出于某些原因,这仍然无法向AOT发出警报,当上述代码执行时,我会收到异常!这是因为泛型参数是值类型吗?还是因为这些是静态类和方法?如何强制Monotouch AOT上面的方法?

有问题的SS代码在JsonTypeSerializer.cs和JsonWriter.Generic.cs中: https://github.com/ServiceStack/ServiceStack.Text/tree/master/src/ServiceStack.Text/Json


这看起来很奇怪。你可以在http://bugzilla.xamarin.com上提交一个测试案例的错误吗? - Rolf Bjarne Kvinge
遇到相同的问题,序列化整数列表的唯一方法是:var serializedData = "["+string.Join(",", Ids.ToArray())+"]"; - Greg R
1个回答

1

现在在Monotouch中存在一些通用的限制。我认为你应该检查你的代码是否符合这些限制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接