Ich versuche herauszufinden, was die Einschränkungen bei der Bereitstellung für iOS von Xamarin wirklich bedeutet.MakeGenericMethod/MakeGenericType auf Xamarin.iOS
http://developer.xamarin.com/guides/ios/advanced_topics/limitations/
Ich hatte den Eindruck, dass Sie keine JIT haben und somit jegliche Makegenericmethod oder Makegenerictype würde nicht funktionieren, dass würde JIT-Kompilierung erforderlich.
Auch habe ich verstanden, dass diese Einschränkungen nicht gelten, wenn der Simulator nicht im vollen AOT-Modus (Ahead of Time) läuft.
Nach dem Einrichten meines Mac, so dass ich auf meinem Telefon bereitstellen konnte, würde ich den folgenden Test fehlschlagen, wenn auf dem tatsächlichen Gerät (iPhone) ausgeführt wird.
Die Sache ist, dass erfolgreich abgeschlossen und ich kann nicht wirklich verstehen, warum. Erfordert dieser Code keine JIT-Kompilierung?
In dem Bemühen, "es zu brechen", habe ich auch einen Test mit MakeGenericType.
[Test]
public void InvokeGenericType()
{
var type = typeof(SomeGenericClass<>).MakeGenericType (typeof(string));
var instance = Activator.CreateInstance (type);
var method = type.GetMethod ("Execute");
method.Invoke (instance, new object[]{"Test"});
}
public class SomeGenericClass<T>
{
public void Execute(T value)
{
}
}
Wie kann das funktionieren, wenn es kein JIT gibt?
Fehle ich etwas?
Dieser Code kann AOT kompiliert werden, so dass es ohne Probleme funktioniert. Wo Sie auf Einschränkungen stoßen, erzeugt IL-Code. Die Code-Generierung funktioniert unter Android und Windows Phone, nicht jedoch unter iOS. – SKall
Nach diesem Artikel wird MakeGenericType bewirken, dass MSIL dynamisch generiert wird. http://msdn.microsoft.com/en-us/magazine/cc163610.aspx Wenn das wirklich der Fall ist, verstehe ich nicht, wie es funktionieren könnte. – seesharper
Ich war eigentlich falsch, da der Code mit der aggressiven Verknüpfungsoption fehlschlagen wird (es sei denn, irgendwo anders im Code gibt es einen Verweis auf SomeGenericClass {string}). Siehe meine Antwort unten mit einem Beispielcode. – SKall