2012-12-11 83 views
26

Musiałem przeskakiwać przez obręcze, ale prawie udało mi się uzyskać ServiceStack pracując na iOS z Monotouch w moim projekcie. Jeden Runtime JIT wyjątek trzyma się:Jak zmusić kompilator Monotouch AOT do wyświetlenia zagnieżdżonej metody generycznej?

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

Kod wykraczająca jest dość prosta:

internal WriteObjectDelegate GetWriteFn<T>() 
    { 
     return JsonWriter<T>.WriteFn(); 
    } 

Jako test, ja zmodyfikowany kod SS aby metody wewnętrznych i rodzaje publicznych i zawarte następujące w kodzie startowym mojego projektu (aby uzyskać wywołanie).

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

To nadal nie ostrzega AOT z jakiegoś powodu, otrzymuję wyjątek, gdy powyższy kod wykona! Czy to dlatego, że parametr ogólny jest typem wartości? Czy to dlatego, że są to statyczne klasy i metody? Jak zmusić Monotouch do AOT powyższych metod?

Kod SS którym mowa jest w JsonTypeSerializer.cs i JsonWriter.Generic.cs w: https://github.com/ServiceStack/ServiceStack.Text/tree/master/src/ServiceStack.Text/Json

+0

To wygląda dziwnie. Czy możesz zgłosić błąd na stronie http://bugzilla.xamarin.com z przypadkiem testowym? –

+0

Mając ten sam problem, jedyną drogą do serializowania listy int jest: var serializedData = "[" + string.Join (",", Ids.ToArray()) + "]"; –

Odpowiedz

1

Istnieją pewne ogólne limitations w MonoTouch teraz. Myślę, że powinieneś sprawdzić swój kod do jednego z nich.