1

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

4

0 に答える 0