servicestack,Xamarin.ios,servicestack" /> servicestack,Xamarin.ios,servicestack" />

Xamarin.ios MonoTouch上的ServiceStack JIT错误

Xamarin.ios MonoTouch上的ServiceStack JIT错误,xamarin.ios,servicestack,Xamarin.ios,servicestack,我以前看过一篇讨论类似(相同?)问题的文章,但没有一个答案可以解决我的问题 我的环境: MonoDevelop 3.0.3.2 Installation UUID: ???????? Runtime: Mono 2.10.9 (tarball) GTK 2.24.10 GTK# (2.12.0.0) Package version: 210090011 Mono for Android not installed Apple Developer Tools:

我以前看过一篇讨论类似(相同?)问题的文章,但没有一个答案可以解决我的问题

我的环境:

MonoDevelop 3.0.3.2 Installation UUID: ???????? Runtime: Mono 2.10.9 (tarball) GTK 2.24.10 GTK# (2.12.0.0) Package version: 210090011 Mono for Android not installed Apple Developer Tools: Xcode 4.3.3 (1178) Build 4E3002 Monotouch: 5.2.12 Build information: Release ID: 30003002 Git revision: 7bf6ac0ca43c1b12703176ad9933c3484c05c84c-dirty Build date: 2012-06-16 04:36:10+0000 Xamarin addins: 62ad7268d38c2ece7e00dc32960bd3bdab8fec38 Operating System: Mac OS X 10.7.4 Darwin NEWTON.local 11.4.0 Darwin Kernel Version 11.4.0 Mon Apr 9 19:32:15 PDT 2012 root:xnu-1699.26.8~1/RELEASE_X86_64 x86_64 例外情况:

System.ExecutionEngineException has been thrown Attempting to JIT compile method 'ServiceStack.Text.Json.JsonReader`1:GetParseFn ()' while running with --aot-only. System.ExecutionEngineException: Attempting to JIT compile method 'ServiceStack.Text.Json.JsonReader`1:GetParseFn ()' while running with --aot-only. at ServiceStack.Text.Json.JsonReader.GetParseFn (System.Type type) [0x00000] in :0 at ServiceStack.Text.Json.JsonTypeSerializer.GetParseFn (System.Type type) [0x00000] in :0 at ServiceStack.Text.Common.TypeAccessor.Create (ITypeSerializer serializer, ServiceStack.Text.TypeConfig typeConfig, System.Reflection.PropertyInfo propertyInfo) [0x00000] in :0 at ServiceStack.Text.Common.DeserializeType`1[ServiceStack.Text.Json.JsonTypeSerializer].GetParseMethod (ServiceStack.Text.TypeConfig typeConfig) [0x00000] in :0 at ServiceStack.Text.Common.JsReader`1[ServiceStack.Text.Json.JsonTypeSerializer].GetParseFn[PingResponse] () [0x00000] in :0 at ServiceStack.Text.Json.JsonReader`1[IMDSSWebService_SS.ServiceModel.PingResponse]..cctor () [0x00000] in :0 已引发System.ExecutionEngineeException 试图在仅使用--aot运行时JIT编译方法“ServiceStack.Text.Json.JsonReader`1:GetParseFn()”。 System.ExecutionEngineeException:尝试在仅使用--aot运行时JIT编译方法“ServiceStack.Text.Json.JsonReader`1:GetParseFn()”。 在0中的ServiceStack.Text.Json.JsonReader.GetParseFn(System.Type类型)[0x00000]处 在0中的ServiceStack.Text.Json.JsonTypeSerializer.GetParseFn(System.Type类型)[0x00000]处 在ServiceStack.Text.Common.TypeAccessor.Create(ITypeSerializer序列化程序、ServiceStack.Text.TypeConfig TypeConfig、System.Reflection.PropertyInfo PropertyInfo)[0x00000]中:0 位于ServiceStack.Text.Common.DeserializeType`1[ServiceStack.Text.Json.JsonTypeSerializer].GetParseMethod(ServiceStack.Text.TypeConfig TypeConfig)[0x00000]中:0 位于ServiceStack.Text.Common.JsReader`1[ServiceStack.Text.Json.JsonTypeSerializer].GetParseFn[PingResponse]()[0x00000]中:0 0中的ServiceStack.Text.Json.JsonReader`1[IMDSSWebService\u SS.ServiceModel.PingResponse]…cctor()[0x00000] 我确实尝试调用JsConfig.RegisterForAot(),但这并没有改变任何事情。我还尝试了Link-SDK-Only、Link-All、Link-None的各种排列,但都失败了,或者出现了上述异常,或者根本没有构建,见下文

Simulator/Debug - Works Fine Simulator/Release - Works Fine iPhone/Debug - Exception Above iPhone/Release - Doesn't even build. (will create a separate SO question) 模拟器/调试-工作正常 模拟器/发布-工作正常 iPhone/Debug-上述异常 iPhone/发布版-甚至不构建。(将创建一个单独的SO问题)
我在ServiceStack.Text.Monotouch.JsConfig.cs中添加了一个类型注册函数,它允许您注册自定义DTO以进行AOT编译。有一个对ServiceStack主线的拉取请求,因此这应该很快就能实现

您需要将所有响应数据注册为非标准C#类型(字符串、int等)的类型。我的
PingResponse
DTO包含一个
StatusEnum
枚举,因此我必须先注册这两个枚举,然后才能解析响应而不引发JIT异常。使用上面的补丁,我会在我的Monotouch应用程序中调用以下命令:

JsConfig.RegisterForAot();
JsConfig.RegisterTypeForAot<PingResponse>();
JsConfig.RegisterTypeForAot<StatusEnum>();
JsConfig.RegisterForAot();
JsConfig.RegisterTypeForAot();
JsConfig.RegisterTypeForAot();

对于复杂的DTO,这可能会变得非常混乱。希望有人(如果时间允许,也许我会)能想出一种自动的方法来发现DTO中应该注册的所有类型?可能是反射?

我在ServiceStack.Text.Monotouch.JsConfig.cs中添加了一个类型注册函数,允许您注册自定义DTO以进行AOT编译。有一个对ServiceStack主线的拉取请求,因此这应该很快就能实现

您需要将所有响应数据注册为非标准C#类型(字符串、int等)的类型。我的
PingResponse
DTO包含一个
StatusEnum
枚举,因此我必须先注册这两个枚举,然后才能解析响应而不引发JIT异常。使用上面的补丁,我会在我的Monotouch应用程序中调用以下命令:

JsConfig.RegisterForAot();
JsConfig.RegisterTypeForAot<PingResponse>();
JsConfig.RegisterTypeForAot<StatusEnum>();
JsConfig.RegisterForAot();
JsConfig.RegisterTypeForAot();
JsConfig.RegisterTypeForAot();
对于复杂的DTO,这可能会变得非常混乱。希望有人(如果时间允许,也许我会)能想出一种自动的方法来发现DTO中应该注册的所有类型?也许是反思

JsConfig.RegisterForAot();
JsConfig.RegisterTypeForAot<PingResponse>();
JsConfig.RegisterTypeForAot<StatusEnum>();