4

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

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

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

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

使用最新的稳定版本:

在 PC 上:用于 VS 1.12.278 Xamarin.iOS 1.12.278 的 Xamarin

Mac:Xamarin.iOS 7.2.2.2

当然,仅使用 SDK 的链接器行为,它运行良好。有什么建议吗?

4

2 回答 2

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中);至少在我的情况下,第二种方法的问题是,我的大多数 VM 没有无参数构造函数,显然在这种情况下使用 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 收集器来运行。

希望这将帮助任何寻找解决方案的人。

于 2014-05-14T16:53:58.213 回答
1

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

于 2016-10-31T16:31:33.250 回答