The details of the Xamarin limitations are here.
Sie scheinen nichts im Reflection.Emit Namespace werden, was die große No-No ist. Dein Code muss immer noch AOT'd sein. Ansonsten würde ich mir vorstellen, dass es nicht funktionieren würde.
Aber es gab Beispiele für [native] Entwickler, die das statische Analysewerkzeug von iOS vereiteln und die dynamische Codeeinschränkung umgehen. Ich habe versucht, den Artikel zu finden, konnte ihn aber nicht finden.
Wie auch immer, ich denke nicht, dass Ihr Szenario das veranschaulicht. Ihr Codebeispiel wird weiterhin AOT-kompiliert.
Aber Sie werfen eine wirklich gute Frage auf: Wann wird der Ausdruck ausgewertet?
EDIT:
Ein weiterer SO zum gleichen Thema beantworten: What does Expression.Compile do on Monotouch?
Es gibt auch einige gute Informationen über Expression.Compile() und "full AOT" hier: http://www.mono-project.com/docs/advanced/aot/
EDIT: Nach dem Lesen von mehr, ich denke, ich weiß, was hier vorgeht. Es ist nicht so, dass Expression.Compile() nicht funktioniert ... es ist, dass, wenn Ihr iOS-App-Bundle ist das statische Analyse-Tool iOS unterzogen, wenn Sie es an den App Store übermitteln, wird es nicht die Analyse übergeben, weil es erzeugt dynamisch Code. Sie können also Expression.Compile() verwenden, aber erwarten Sie nicht, dass es in den App Store übernommen wird. Aber wie von @svick erwähnt, wird Ihre Expression.Compile(), wenn Sie die Kompilierungsoption "Full AOT" verwenden, wahrscheinlich zur Laufzeit fehlschlagen oder sogar die Kompilierung fehlschlagen.
Ich vermutete so etwas. Ist das irgendwo dokumentiert? –
Während Ihre Antwort sinnvoll ist, würde ich gerne wissen, ob es eine Referenz oder Dokumentation gibt, die dies bestätigt. –
@PhilippeLeybaert Ich konnte keine finden, weshalb ich auf die Quelle schaute. – svick