2012-12-11 2 views
26

나는 농구를 뛰어 넘어야했지만, 내 프로젝트에서 Monotouch으로 iOS에서 일하는 사람은 ServiceStack입니다. 한 런타임 JIT 예외가 잡고있다 :Monotouch AOT 컴파일러가 중첩 된 일반 메소드를 보도록 강제하는 방법은 무엇입니까?

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가 위의 방법으로 강제로 AOT를하도록하려면 어떻게해야합니까? 지금 monotouch 몇 가지 일반적인 limitations을있다 https://github.com/ServiceStack/ServiceStack.Text/tree/master/src/ServiceStack.Text/Json

+0

이상하게 보입니다. 테스트 케이스와 함께 http://bugzilla.xamarin.com에서 버그를 제기 할 수 있습니까? –

+0

동일한 문제가 발생하면 int 목록을 직렬화하는 유일한 방법은 다음과 같습니다. var serializedData = "["+ string.Join (",", Ids.ToArray()) + "]"; –

답변

1

: 문제

에 SS 코드에 JsonTypeSerializer.cs 및 JsonWriter.Generic.cs입니다. 난 당신이 그들 중 하나를 귀하의 코드를 확인해야한다고 생각합니다.