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)不会 AOT 编译我引用的 iOS 库项目?

另一方面,有没有办法在 iOS 模拟器中禁用 JIT 以使其更像设备?

更新

看来,它与我其他项目中的其他方法/类有关。似乎有一种用法会导致整个库崩溃。如果我不使用这个特定的静态类,我可以正确使用整个库。

Noodle.Engine.Singleton<Noodle.TinyIoCContainer>.Instance = new Noodle.TinyIoCContainer();
// var current = Noodle.EngineContext.Current;

上面的代码有效。容器被创建。但是,如果我取消注释第二行,第一行不会给我这些 --aot-only 错误。

有任何想法吗?“Current”属性应该只返回我在第一行创建的单例实例。

这是 github 上的 EngineContext.cs 文件,可帮助确定原因。

https://github.com/theonlylawislove/Noodle/blob/master/Source/Noodle/EngineContext.cs

4

0 回答 0