Xamarin.iOS アプリケーションがあります。iOS ライブラリ プロジェクトを参照しています。ライブラリ プロジェクトには、非常に単純なクラスがあります。
using System;
namespace Noodle.iOS
{
public class TestClass
{
string property;
public TestClass (string property)
{
this.property = property;
}
public string Property
{
get
{
return property;
}
}
}
}
AppDelegate でこのクラスをインスタンス化しようとすると、次のエラーが発生しました。
System.ExecutionEngineException: Attempting to JIT compile method 'Noodle.iOS.TestClass:.ctor (string)' while running with --aot-only. See http://docs.xamarin.com/ios/about/limitations for more information
このコードを使用して、AppDelegate でクラスをインスタンス化しています。
var testClass = new Noodle.iOS.TestClass("test");
エラー メッセージに記載されている「制限事項」を参照しましたが、セットアップに関連するものは見つかりませんでした。私はジェネリック/バーチャルを使用していません。私もすべてをリンクしています。
このエラーが発生する理由はありますか? MonoTouch (または mtouch.exe) が、参照されている iOS ライブラリ プロジェクトを AOT コンパイルしないのはなぜですか?
反対に、iOS シミュレーターで JIT を無効にしてデバイスのように動作させる方法はありますか?
アップデート
私の他のプロジェクトの他のメソッド/クラスと関係があるようです。ライブラリ全体が壊れる原因となる使い方が 1 つあるようです。この特定の静的クラスを使用しない場合、ライブラリ全体を正しく使用できます。
Noodle.Engine.Singleton<Noodle.TinyIoCContainer>.Instance = new Noodle.TinyIoCContainer();
// var current = Noodle.EngineContext.Current;
上記のコードは機能します。コンテナが作成されます。ただし、SECOND 行のコメントを外すと、FIRST 行でこれらの --aot-only エラーが発生しなくなります。
何か案は?「Current」プロパティは、最初の行で作成されたシングルトン インスタンスを返すだけです。
原因の特定に役立つ github の EngineContext.cs ファイルを次に示します。
https://github.com/theonlylawislove/Noodle/blob/master/Source/Noodle/EngineContext.cs