Windows下Xamarin.Forms用SkiaSharp遇libSkiaSharp.so缺失异常求助
解决SkiaSharp
System.DllNotFoundException: libSkiaSharp.so 异常 嘿,这个问题我之前在Xamarin.Forms项目里也踩过坑,主要是包版本不兼容和平台配置的问题,咱们一步步来搞定它:
首先,核心问题:SkiaSharp包版本混乱了
你现在装的SkiaSharp主包是v2.80.1,但SkiaSharp.Svg(v1.60.0)和SkiaSharp.Views.Forms(v1.68.3)都是旧的1.x版本——这几个包必须严格保持版本一致!SkiaSharp在2.x版本做了API大变更,跨版本混用直接会导致依赖库找不到的问题,更别说旧版的SkiaSharp.Svg已经停止维护,在2.x里它改名叫SkiaSharp.Svg.Forms了。
解决步骤:统一包版本
- 先卸载当前所有SkiaSharp相关的NuGet包:SkiaSharp、SkiaSharp.Svg、SkiaSharp.Views.Forms
- 重新安装同版本的包,针对你的Xamarin.Forms 4.5,直接选v2.80.1就行:
- 可以在NuGet包管理器里搜这三个包,手动选v2.80.1;或者用Package Manager Console执行命令:
Install-Package SkiaSharp -Version 2.80.1 Install-Package SkiaSharp.Svg.Forms -Version 2.80.1 Install-Package SkiaSharp.Views.Forms -Version 2.80.1
- 可以在NuGet包管理器里搜这三个包,手动选v2.80.1;或者用Package Manager Console执行命令:
然后,确认Android平台的库支持
你说.so是Linux的库,没错,但Android是基于Linux内核的,所以调试Android项目时确实需要这个库。得确保:
- 打开Android项目的属性 → Android选项 → 高级,勾选你需要支持的ABI(比如armeabi-v7a、arm64-v8a、x86这些常用的),SkiaSharp会自动为这些ABI打包对应的
.so库。 - 清理并重新生成整个解决方案:点Visual Studio顶部菜单的
生成→清理解决方案,再点重新生成解决方案,确保所有依赖库都正确复制到输出目录。
最后,检查SVG加载的代码和文件设置
有时候文件路径不对或者生成操作没设对也会出问题,你可以参考这样的写法:
- 如果SVG文件是Android项目的Asset:
using (var stream = Assets.Open("your_svg_file.svg")) { svgImage.Load(stream); } - 如果是共享项目里的嵌入资源:
var assembly = typeof(YourPageOrClass).Assembly; using (var stream = assembly.GetManifestResourceStream("YourProjectNamespace.your_svg_file.svg")) { svgImage.Load(stream); }
别忘了把SVG文件的生成操作设置成AndroidAsset(Android项目)或者Embedded Resource(共享项目)。
额外排查点
如果你是调试UWP/Windows项目却碰到这个异常,那大概率是误引用了Android平台的SkiaSharp库,去项目的NuGet引用里检查下,只保留对应平台的库就行;另外也确认下你的NuGet源是官方的,避免下载到损坏的包。
内容的提问来源于stack exchange,提问作者hecate




