我有以下方法:
ApiResponse<T> PostMultipart<T>(string uploadUrl, NameValueCollection formParamters, params UploadFile[] uploadFiles);
UploadFile只是一个Poco:
public class UploadFile
{
public string FilePath { get; set; }
public string ContentType { get; set; }
public string ParameterName { get; set; }
}
通过调用该方法,在模拟器上使用“Debug | iPhoneSimulator”和使用iOS 5.1.1和“Release | iPhone”的iPod Touch上运行良好。
但是当我开始在设备上调试应用程序(“Debug | iPhone”)时,我得到以下异常:
System.ExecutionEngineException:在使用--aot-only运行时尝试JIT编译方法'Xyz.Api.ApiClient:PostMultipart(string,System.Collections.Specialized.NameValueCollection,Xyz.Api.UploadFile [])'。有关详细信息,请参阅http://docs.xamarin.com/ios/about/limitations。
我在链接页面上看不到任何相关信息。我无法理解为什么只有在手机上调试时才会出现这种行为。
其他人是否能够理解这里发生了什么? :)
答案 0 :(得分:6)
您的代码示例不够完整(要复制)但很可能是,因为您的<T>
是值类型(例如int
,枚举... )。
AOT编译器难以为无法共享代码的值类型生成代码(就像任何引用类型一样)。解决方法包括:
暗示你所需要的AOT编译器(确保<T>
已知,并为你正在使用的值类型生成代码);
使用引用类型(例如string
)代替值类型(例如int
)
我无法理解为什么只有在手机上调试时才会出现这种行为。
iOS设备不允许使用JIT代码(Apple的限制),因此使用了AOT。 iOS模拟器没有此限制,因此使用JIT(因为它比AOTing代码更快很多)。