4

HotTuna パッケージの FirstView を使用するスケルトン プロジェクトで、ビルド リンカーの動作を「すべてのアセンブリをリンクする」に設定すると、次のエラーが発生します。

System.MissingMethodException: Cirrious.CrossCore.IoC.MvxPropertyInjector 型の既定のコンストラクターが見つかりません

すべての MvvmCross (4 パッケージ) に NuGet パッケージ v3.1.1 を使用

LinkerPleaseInclude ファイルには [MonoTouch.Foundation.Preserve(AllMembers = true)] という行があります。

最新の安定版ビルドを使用:

PC: Xamarin for VS 1.12.278 Xamarin.iOS 1.12.278

Mac: Xamarin.iOS 7.2.2.2

もちろん、SDK の Linker の動作のみで問題なく動作します。何か提案はありますか?

4

2 に答える 2

8

解決済み; したがって、基本プロジェクトでは、次の順序で 3 つの連続したエラーが発生しました。

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 内) に作成することです。少なくとも私の場合、2 番目のアプローチの問題は、ほとんどの 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 に答える