我想使用 SlidingPaneLayout 或 DrawerLayout,但这些需要更新的支持库。 Xamarin 在组件商店中有一个(Android 支持库 v4(修订版 18))。
但是,如果我尝试使用它并使用 Mvvm Fragments 支持(需要引用 Mono.Android.Support.v4),我会收到如下链接器错误:
error : Duplicate managed type found! Mappings between managed types and Java types must be unique. First Type: 'Android.Support.V4.App.FragmentManager/IOnBackStackChangedListenerImplementor, Xamarin.Android.Support.v4-r18, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'; Second Type: 'Android.Support.V4.App.FragmentManager/IOnBackStackChangedListenerImplementor, Mono.Android.Support.v4, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065'
删除旧的支持库引用会导致不同的链接器错误;
错误 CS0012:类型
Android.Support.V4.App.FragmentActivity' is defined in an assembly that is not referenced. Consider adding a reference to assembly
Mono.Android.Support.v4,版本=0.0.0.0,Culture=neutral,PublicKeyToken=84e04ff9cfb79065' 最佳答案
我相信这是由 Xamarin 将程序集从“Mono”重新命名为“Xamarin”引起的普遍问题。
第三方程序集(如 MvvmCross)和其他程序集(如 Google Play 服务组件)当前链接到 Xamarin.Android(以前称为 Mono for Android)附带的名为“Mono”的程序集。
目前,MvvmCross 无法更改它与“Xamarin”命名程序集的链接,而无需通过 Google Play 组件取消对 Maps v2 的支持 - 我们有更多用户目前要求支持 map ,然后要求在最新的支持库中支持抽屉导航.
如果有人需要链接到以“Xamarin”命名的程序集,那么您需要某种方式来重定向程序集以使用更改后的名称。我知道这样做的方法是:
[TypeForwardedTo]
类型声明的虚拟“Mono.Android.Support.v4”程序集来执行重定向 - 生成它会有点乏味,但应该可以工作。我试图生成一个 TypeForwardTo
程序集 - https://gist.github.com/slodge/6790040 - 但我认为 Xamarin 使用了程序集强命名的事实意味着我无法让它工作:/Xamarin 可能能够? 关于android - MvvmCross - 尝试使用 Fragments 和最新的支持库导致链接问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19125901/