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

时间:2012-12-11 23:49:17

标签: xamarin.ios servicestack aot

我不得不跳过篮球,但我几乎设法让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代码以使内部方法和类型公开,并在我的项目的启动代码中包含以下内容(实际上被调用)。

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

由于某些原因,这仍然没有提醒AOT,当上面的代码执行时我得到了异常!这是因为泛型参数是值类型吗?或者是因为这些是静态类和方法?我如何强制使用Monotouch上述方法?

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

1 个答案:

答案 0 :(得分:1)

现在,monotouch中有一些通用的limitations。我认为你应该检查你的代码中的一个。