如何在同一项目中使用依赖不同MonoAndroid的两款MvvmCross 5.6.3组件?
我完全理解你现在碰到的头疼问题——MvvmCross.Plugin.Location.Fused 5.6.3和MvvmCross.Droid.Support.v7.AppCompat 5.6.3因为MonoAndroid版本要求不匹配,没法在同一个项目里正常共存。下面是几个经过开发者验证的可行解决思路:
1. 升级到统一的MvvmCross新版本
MvvmCross 5.6.3属于比较早期的版本,后续发布的稳定版本(比如6.x及以上)已经修复了这类依赖冲突问题。你可以尝试把这两个组件都升级到同一个较新的稳定版本,新版本的组件会统一依赖的MonoAndroid版本,同时对Xamarin.Android.Support库的依赖也会同步对齐,从根源上解决版本冲突。
操作步骤:
- 打开NuGet包管理器,先卸载当前的两个MvvmCross组件
- 搜索并安装版本号完全一致的
MvvmCross.Droid.Support.v7.AppCompat和MvvmCross.Plugin.Location.Fused
2. 降级Xamarin.Android.Support库到兼容版本
如果暂时没法升级MvvmCross主版本,你可以尝试把Xamarin.Android.Support.v7.AppCompat的版本降到25.3.1——这是MvvmCross.Droid.Support.v7.AppCompat 5.6.3明确要求的最低版本,这个版本的Support库依赖MonoAndroid v7.0,和Location.Fused插件的v0.0依赖(v0.0是兼容多个旧版本的通配标记)可以完美兼容。
操作步骤:
- 在NuGet包管理器中找到
Xamarin.Android.Support.v7.AppCompat,选择25.3.1版本进行安装 - 安装时如果提示其他关联的Support库需要降级,直接选择“接受”,确保所有Support库都统一为25.3.1系列版本
3. 手动编辑项目文件强制统一依赖
如果NuGet自动处理依赖时出现异常,可以直接编辑Android项目的.csproj文件,手动指定所有相关组件的版本:
- 右键项目 → 选择“编辑项目文件”
- 找到所有涉及
MvvmCross和Xamarin.Android.Support的PackageReference节点,统一版本号:<PackageReference Include="MvvmCross.Droid.Support.v7.AppCompat" Version="5.6.3" /> <PackageReference Include="MvvmCross.Plugin.Location.Fused" Version="5.6.3" /> <PackageReference Include="Xamarin.Android.Support.v7.AppCompat" Version="25.3.1" /> - 保存文件后重新加载项目,NuGet会按照你指定的版本恢复依赖
4. 替换定位插件为原生实现
如果以上方法都不生效,你可以考虑暂时弃用MvvmCross.Plugin.Location.Fused,直接基于Xamarin原生定位API或Google Play Services Location API自己实现定位功能,这样就能避开插件的依赖限制。
需要注意的是,自己实现时要处理好权限申请、定位回调等逻辑,确保和MvvmCross的MVVM架构兼容。
内容的提问来源于stack exchange,提问作者M. Feldman

