Android运行Maui.Graphics时触发System.TypeLoadException错误
核心原因
该错误本质是Android平台下缺失Microsoft.Maui.Graphics.Platform.GraphicsExtensions的实现,通常由库版本不匹配、平台特定包未引用或构建缓存异常导致。
具体修复步骤
统一NuGet包版本
打开项目的csproj文件,确保所有Microsoft.Maui.*相关包(包括Microsoft.Maui.Graphics、Microsoft.Maui.Controls等)的版本完全一致。比如全部指定为8.0.3(根据你当前MAUI版本调整),版本不一致会引发平台层依赖加载失败。添加Android平台专属Graphics包
在NuGet包管理器中安装Microsoft.Maui.Graphics.Android,确保其版本与主Microsoft.Maui.Graphics包完全匹配,该包提供Android平台所需的Graphics扩展实现。清理重建项目
- 删除项目目录下的
bin和obj文件夹 - 在Visual Studio中依次执行清理解决方案→重建解决方案
- 命令行环境可运行:
dotnet clean dotnet restore dotnet build -f net8.0-android
构建缓存是跨平台依赖异常的常见诱因,清理后重建能解决大部分此类问题。
- 删除项目目录下的
检查IDrawable实现的平台兼容性
确认你的WeightDatesCurve类(IDrawable实现)中没有调用仅Windows平台支持的Graphics扩展方法。若存在此类代码,需用#if ANDROID/#if WINDOWS等条件编译指令隔离平台逻辑,避免Android运行时找不到对应方法。验证MAUI项目配置
打开csproj文件,确认Android目标框架配置正确且包含完整的MAUI引用:<PropertyGroup> <TargetFrameworks>net8.0-android;net8.0-windows10.0.19041.0</TargetFrameworks> <UseMaui>true</UseMaui> <SingleProject>true</SingleProject> </PropertyGroup>确保未遗漏Android平台的MAUI相关配置。
额外排查手段
若以上步骤无效,可创建一个全新的MAUI测试项目,仅添加GraphicsView和你的IDrawable实现,验证是否能在Android上正常运行。若测试项目正常,说明原项目存在配置冲突,可逐步迁移代码到新项目中定位问题。
内容的提问来源于stack exchange,提问作者mesut

