最低版本10、目标版本11下Xamarin C#用SupportMapFragment加载谷歌地图报错
报错成因及解决方案
这个CS0030类型转换错误的核心原因是安卓支持库架构升级导致的类型不匹配:
你升级项目依赖、调高目标安卓版本后,最新版的Xamarin.GooglePlayServices.Maps包已经全面适配AndroidX,不再兼容旧版Android.Support支持库体系。旧版本8.1项目用的SupportMapFragment继承自Android.Support.V4.App.Fragment,和SupportFragmentManager返回的Fragment类型一致,所以可以正常转换;但新版SupportMapFragment继承的是AndroidX.Fragment.App.Fragment,和旧Support库的Fragment属于完全不同的类型,强制转换就会报错。
可按以下步骤解决:
- 第一步:完成项目AndroidX迁移
卸载项目中所有Android.Support.*开头的NuGet包,换成对应AndroidX前缀的官方支持包,确保你的MainActivity继承自AndroidX.AppCompat.App.AppCompatActivity,而非旧版Support库的AppCompatActivity。 - 第二步:修改地图实例获取代码
废弃旧的SupportFragmentManager,改用AndroidX对应的FragmentManager获取地图实例,参考代码如下:Android.Gms.Maps.SupportMapFragment mapFragment = (Android.Gms.Maps.SupportMapFragment)FragmentManager.FindFragmentById(Resource.Id.map); mapFragment.GetMapAsync(this); - 第三步:核对布局配置
确认布局文件中地图fragment的android:name属性值为android.gms.maps.SupportMapFragment,没有使用旧版废弃的类名。 - 额外排查:如果修改后仍然报错,可删除项目的bin、obj文件夹后重新构建,避免旧缓存导致的类型识别异常。
内容的提问来源于stack exchange,提问作者karhukoti
相关产品推荐
相关产品推荐

