Xamarin链接器:未找到类型Cirrious.CrossCore.IoC.MvxPropertyInjector的默认构造函数

时间:2014-05-10 13:49:38

标签: xamarin.ios mvvmcross

使用HotTuna包中的FirstView骨架项目,并将Build链接器行为设置为“链接所有程序集”,我收到以下错误:

System.MissingMethodException:找不到类型Cirrious.CrossCore.IoC.MvxPropertyInjector的默认构造函数

对所有MvvmCross(4个包)使用nuGet包v3.1.1

LinkerPleaseInclude文件确实有这一行     [MonoTouch.Foundation.Preserve(AllMembers = true)]

使用最新的稳定版本:

在电脑上: Xamarin for VS 1.12.278 Xamarin.iOS 1.12.278

的Mac: Xamarin.iOS 7.2.2.2

仅使用SDK的链接器行为,它运行正常。有人建议吗?

2 个答案:

答案 0 :(得分:8)

解决;因此,对于基本项目,按以下顺序连续出现三个错误:

System.MissingMethodException: Default constructor not found for type Cirrious.CrossCore.IoC.MvxPropertyInjector
  • 可以通过--linkskip = Cirrious.Core(丑陋)或在LinkerPleaseInclude.cs中包含以下内容来解决

    public void Include(MvxPropertyInjector injector){
        injector = new MvxPropertyInjector ();
    } 
    

下一个错误是:

    Cirrious.CrossCore.Exceptions.MvxException: Failed to construct and initialize ViewModel for type {0} from locator MvxDefaultViewModelLocator - check MvxTrace for more information

这个很难;简单的解决方法是使用--linkskip = portableLibrary,或者在某处创建ViewModel的实例(可能在LinkerPleaseInclude.cs中);至少在我的情况下,第二种方法的问题是,我的大多数虚拟机没有参数较少的构造函数,显然在这种情况下使用IOC无济于事。

最终错误:

System.ArgumentNullException: missing source event info in MvxWeakEventSubscription
Parameter name: sourceEventInfo

使用--linkskip = System(丑陋),或将以下内容添加到LinkerPleaseInclude.cs

    public void Include(INotifyPropertyChanged changed)
    {
        changed.PropertyChanged += (sender, e) =>  {
            var test = e.PropertyName;
        };
    }

这足以使我的基本项目与LinkAllAssemblies,使用LLVM优化器和使用SGen收集器一起运行。

希望这能帮助任何寻求解决方案的人。

答案 1 :(得分:1)

当我的XCode与Mac上的最新Xamarin不同步时,我点击了这个。将XCode升级到最新解决了问题。