You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin中调用sKSVG.Load(stream)抛出空参数异常如何解决?

问题分析与解决方案

异常产生原因

System.ArgumentNullException: Value cannot be null. Parameter name: input异常的触发原因是传入sKSVG.Load()方法的stream参数为null,stream为空的常见场景如下:

  • 资源路径拼接错误:assembly.Name + ".Images."+ Source 拼接得到的资源路径和程序集中实际存储的嵌入式资源路径不匹配,可能是文件名拼写错误、路径大小写不匹配、缺少.svg后缀,或者项目默认命名空间和assembly.Name不一致导致的。
  • 资源生成操作配置错误:SVG文件的生成操作没有设置为嵌入的资源(Embedded Resource),导致资源没有被打包到程序集中,读取时直接返回null。
  • 程序集获取错误:读取资源使用的程序集和SVG资源实际所在的程序集不匹配,比如SVG放在共享类库中,但读取时用了平台项目的程序集。

解决方法

  1. 首先添加空校验与路径调试逻辑,拿到stream后先判断是否为空,同时输出所有已嵌入的资源名称方便核对:
using(Stream stream = typeof(SVGImage).GetTypeInfo().Assembly.GetManifestResourceStream(assembly.Name + ".Images."+ Source))
{
    // 新增空判断与调试逻辑
    if (stream == null)
    {
        // 打印当前程序集所有嵌入资源名称,核对路径是否正确
        var allResources = typeof(SVGImage).GetTypeInfo().Assembly.GetManifestResourceNames();
        foreach (var resName in allResources)
        {
            System.Diagnostics.Debug.WriteLine($"已嵌入资源:{resName}");
        }
        throw new FileNotFoundException($"未找到指定SVG资源,尝试读取的路径为:{assembly.Name}.Images.{Source}");
    }
    SkiaSharp.Extended.Svg.SKSvg sKSVG = new SkiaSharp.Extended.Svg.SKSvg();
    sKSVG.Load(stream);
    // 原有渲染逻辑保持不变
    SKImageInfo imageInfo = e.Info;
    sKCanvas.Translate(imageInfo.Width / 2f, imageInfo.Height / 2f);
    SKRect rectBounds = sKSVG.ViewBox;
    float xRatio = imageInfo.Width / rectBounds.Width;
    float yRatio = imageInfo.Height / rectBounds.Height;
    float minRatio = Math.Min(xRatio, yRatio);
    sKCanvas.Scale(minRatio);
    sKCanvas.Translate(-rectBounds.MidX, -rectBounds.MidY);
    sKCanvas.DrawPicture(sKSVG.Picture);
}
  1. 修正资源配置:选中项目中的SVG文件,右键打开属性面板,确认生成操作设置为嵌入的资源,复制到输出目录设置为如果较新则复制。
  2. 修正资源路径:根据调试输出的资源名称,调整拼接规则,确保最终拼接的路径和实际嵌入的资源名称完全一致,注意嵌入式资源路径区分大小写,不要遗漏.svg后缀。
  3. 核对程序集:如果SVG资源存放在单独的类库项目中,需要替换读取资源时使用的程序集为资源所在类库的程序集,不要错误使用启动项目的程序集读取。

内容的提问来源于stack exchange,提问作者Amine Bougrine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:09:04