Xamarin.Forms迁移MAUI后遇xamarin.kotlin.stdlib重复定义错误
解决MAUI迁移中Kotlin依赖冲突及Scope警告问题
问题根源
- 编译错误:
kotlin.internal.jdk7.JDK7PlatformImplementations$ReflectSdkVersion类同时存在于xamarin.kotlin.stdlib 1.8.10和xamarin.kotlin.stdlib.jdk7 1.7.20.1两个包中,属于不同版本Kotlin依赖的冲突问题 - Scope警告:依赖库引用的
Scope.LIBRARY_GROUP_PREFIX/Scope.LIBRARY枚举不存在,是AndroidX或Google服务依赖版本不兼容导致的
分步解决办法
1. 强制统一Kotlin依赖版本
在项目的<PropertyGroup>节点中添加Kotlin版本强制配置,避免不同依赖拉取不一致的版本:
<PropertyGroup> <!-- 指定兼容net7-android的Kotlin版本,推荐1.8.22 --> <XamarinKotlinVersion>1.8.22</XamarinKotlinVersion> </PropertyGroup>
2. 清理冲突的间接依赖
- 打开NuGet包管理器,查看哪个上游依赖在拉取旧版本的
xamarin.kotlin.stdlib.jdk7 1.7.20.1(大概率是FirebaseAuthentication.net或Xamarin.GooglePlayServices.Base) - 将该上游依赖升级到最新兼容版本,比如
FirebaseAuthentication.net可尝试升级到5.x系列,Xamarin.GooglePlayServices.Base升级到120+版本
3. 统一AndroidX依赖版本
项目中AndroidX包版本偏低,建议升级到适配net7-android的版本:
Xamarin.AndroidX.Annotation升级至1.7.0.1Xamarin.AndroidX.RecyclerView升级至1.3.2Xamarin.AndroidX.Work.Runtime升级至2.8.1.1
4. 调整R8配置(可选调试用)
若上述操作后仍有问题,可启用注释的D8/R8配置并添加排除规则:
<AndroidDexTool>d8</AndroidDexTool> <AndroidLinkTool>r8</AndroidLinkTool> <!-- 让R8忽略重复的Kotlin类 --> <AndroidR8ExtraArguments>--keep class kotlin.internal.jdk7.** { *; }</AndroidR8ExtraArguments>
5. 清理项目缓存
- 删除项目根目录下的
obj、bin文件夹 - 删除
.nuget\packages中xamarin.kotlin.stdlib、xamarin.kotlin.stdlib.jdk7相关文件夹 - 执行
dotnet restore重新还原依赖,再重新构建项目
验证步骤
- 执行
dotnet restore还原依赖 - 清理项目(Build -> Clean Solution)
- 先构建Debug版本确认错误消失
- 再构建Release版本检查警告是否减少或消除
内容的提问来源于stack exchange,提问作者K. Moteluk
相关产品推荐
相关产品推荐

