Подтвердить что ты не робот

Как заставить компилятор Monotouch AOT увидеть встроенный общий метод?

Мне пришлось прыгать через обручи, но мне почти удалось получить ServiceStack, работающий на iOS с Monotouch в моем проекте. Исключено одно исключение 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

4b9b3361

Ответ 1

В monotouch теперь есть общий limitations. Я думаю, вы должны проверить свой код на один из них.