.NET MAUI迁移后ShellItemRenderer和TabbedPageRenderer报错如何修复?
解决.NET MAUI迁移后Android构建的渲染器与依赖包错误
1. 替换旧自定义渲染器代码
- 检查项目中是否存在继承自
ShellItemRenderer或TabbedPageRenderer的自定义渲染器,MAUI已弃用Xamarin Forms的旧渲染器体系,改用Handler模式替代。 - 若需保留自定义导航逻辑,替换为MAUI对应的Handler:
- ShellItem对应
ShellItemHandler - TabbedPage对应
TabbedPageHandler
- ShellItem对应
- 移除旧渲染器中实现
OnItemSelectedListener的代码,改用MAUI Handler的Mapper或PlatformView事件处理逻辑,比如监听TabbedPage的CurrentPageChanged事件,而非Android原生的onNavigationItemSelected。
2. 清理并统一依赖包
- 彻底移除所有Xamarin开头的AndroidX/Material包(如
Xamarin.Google.Android.Material、Xamarin.AndroidX.AppCompat.Resources),MAUI的Microsoft.Maui.Controls已内置兼容的.NET版本依赖,无需手动引用Xamarin版包。 - 打开项目的
.csproj文件,删除所有Xamarin相关的<PackageReference>节点,确保仅保留MAUI官方包,且所有MAUI包版本一致(推荐使用最新稳定版)。 - 若需AppCompat资源,添加.NET版本的
Microsoft.AndroidX.AppCompat.Resources包,而非Xamarin版。
3. 清理缓存并重建项目
- 删除项目根目录下的
bin和obj文件夹,彻底清除编译缓存。 - 清除NuGet缓存:执行命令
dotnet nuget locals all --clear,或通过Visual Studio工具菜单→NuGet包管理器→管理解决方案的NuGet包→设置→清除缓存。 - 重启Visual Studio,重新构建Android项目。
4. 检查Android项目配置
- 确保Android项目的目标框架为.NET 7或更高(MAUI最低支持.NET 6,推荐使用较新版本)。
- 在项目属性中设置目标Android版本为API 33及以上。
- 打开
AndroidManifest.xml,移除所有Xamarin Forms自定义渲染器的注册配置,改用MAUI Handler的注册方式(在MauiProgram.cs中通过ConfigureMauiHandlers注册)。
内容的提问来源于stack exchange,提问作者Judson Abraham
相关产品推荐
相关产品推荐

