MvvmCross - 尝试使用Fragments和最新支持lib导致链接问题

时间:2013-10-01 21:03:17

标签: android xamarin.android xamarin mvvmcross

我想使用SlidingPaneLayout或DrawerLayout,但这些需要更新的支持库。 Xamarin在组件商店中有一个(Android Support Library v4(Rev 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,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = 84e04ff9cfb79065'

1 个答案:

答案 0 :(得分:1)

我认为这是Xamarin将一个装配从'Mono'重新命名为'Xamarin'引起的一般问题。

像MvvmCross这样的第三方程序集以及其他类似Google Play服务组件的程序集目前链接着与Xamarin.Android(以前的Mono for Android)一起提供的“Mono”命名程序集。

目前,MvvmCross无法通过Google Play组件删除对“Xamarin”命名程序集的链接而不删除对Maps v2的支持 - 我们目前有更多用户要求支持地图,然后要求支持导航抽屉最新的支持库。


如果有人需要链接“Xamarin”命名的程序集,那么您需要一些方法来重定向程序集以使用更改的名称。我知道这样做的方法是:

  • 完全.Net我相信你可以使用app.config文件中的'绑定重定向'来做到这一点,但我不认为这些在Xamarin.Android中可用。
  • 您可能会使用虚拟的“Mono.Android.Support.v4”程序集进行重定向,该程序集仅包含[TypeForwardedTo]类型的声明 - 生成这个会有点单调乏味但应该可以正常工作。我试图生成TypeForwardTo程序集 - https://gist.github.com/slodge/6790040 - 但我认为Xamarin使用程序集强命名的事实意味着我无法使用它:/ Xamarin也许能够虽然?
  • 你可以分叉并重建现有的MvvmCross'Fragging'程序集 - 它并不大 - 所以它引用了'Xamarin'命名的组件。您还需要为您需要的任何其他程序集执行此操作 - 例如谷歌播放地图。