MAUI .NET 8 iOS加载SVG时SkiaSharp方法缺失异常解决咨询
问题:MAUI .NET 8迁移后加载SVG遇
MissingMethodException异常 迁移Xamarin Forms项目到MAUI .NET 8后,加载SVG图片时抛出以下异常:
Unhandled Exception: System.MissingMethodException: Method not found: SkiaSharp.SKMatrix SkiaSharp.SKMatrix.MakeTranslation(single,single) at SkiaSharp.Extended.Svg.SKSvg.LoadElements(IEnumerable`1 elements, SKCanvas canvas, SKPaint stroke, SKPaint fill) at SkiaSharp.Extended.Svg.SKSvg.Load(XDocument xdoc) at SkiaSharp.Extended.Svg.SKSvg.Load(XmlReader reader) at SkiaSharp.Extended.Svg.SKSvg.Load(Stream stream) at SKM_MOBILE.UI.Core.Utils.CommonUtils.GetSVG(String svgName, Boolean isEnergized, Boolean inService, String imagePath) at SkiaSharp.Views.Maui.Controls.SKCanvasView.OnPaintSurface(SKPaintSurfaceEventArgs e) at SkiaSharp.Views.Maui.Controls.SKCanvasView.SkiaSharp.Views.Maui.ISKCanvasView.OnPaintSurface(SKPaintSurfaceEventArgs e) at SkiaSharp.Views.Maui.Handlers.SKCanvasViewHandler.OnPaintSurface(Object sender, SKPaintSurfaceEventArgs e) at SkiaSharp.Views.iOS.SKCanvasView.OnPaintSurface(SKPaintSurfaceEventArgs e) at SkiaSharp.Views.iOS.SKCanvasView.Draw(CGRect rect) at UIKit.UIApplication.UIApplicationMain(Int32 args, String[] argv, IntPtr principalClassName, IntPtr delegateClassName) in /Users/builder/azdo/_work/1/s/xamarin-macios/src/UIKit/UIApplication.cs:line 58 at UIKit.UIApplication.Main(String[] args, Type principalClass, Type delegateClass) in /Users/builder/azdo/_work/1/s/xamarin-macios/src/UIKit/UIApplication.cs:line 94 at SKM_MOBILE.Program.Main(String[] args) in /Users/macmini3/Documents/MAUI/SKM_MOBILE/SKM_MOBILE/Platforms/iOS/Program.cs:line 13
触发异常的代码片段:
using (var stream = GetImageStream(svgName.Replace(".PNG", ".svg").Replace(".png", ".svg"), imagePath)) { if (stream != null) { svg = new SkiaSharp.Extended.Svg.SKSvg(); svg.Load(stream); SVGComponentImage[$"{key}"] = svg; } }
解决方案
这个异常是SkiaSharp系列包版本不兼容导致的:.NET 8对应的SkiaSharp包版本已更新,而你使用的SkiaSharp.Extended.Svg版本可能仍适配旧版SkiaSharp,找不到新版中已变更的SKMatrix.MakeTranslation方法。
解决步骤:
- 统一更新SkiaSharp相关包:在NuGet包管理器中卸载所有旧版
SkiaSharp、SkiaSharp.Views.Maui、SkiaSharp.Extended.Svg包,重新安装适配.NET 8的最新稳定版,确保所有包版本完全一致。 - 清理缓存并重建项目:删除项目目录下的
bin和obj文件夹,执行dotnet clean命令清理后,重新编译运行。 - 检查依赖冲突:打开项目
.csproj文件,确认所有SkiaSharp相关包版本统一;若存在间接依赖的旧版包,可通过指定版本号强制覆盖。
内容的提问来源于stack exchange,提问作者Anitha v
相关产品推荐
相关产品推荐

