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

嵌入资源文件读取触发System.ArgumentNullException问题求助

解决嵌入资源读取时的System.ArgumentNullException异常

出现Value cannot be null. Parameter name: stream错误,本质是GetManifestResourceStream未找到指定的嵌入资源、返回null,导致StreamReader初始化失败。以下是排查和解决步骤:

  • 确认资源的完整名称
    嵌入资源的名称不是单纯的文件名,而是项目命名空间 + 文件夹路径(如果有) + 文件名的组合。比如项目命名空间是MyApp、文件放在根目录,资源全名应为MyApp.File.sym。可以用这段代码列出当前程序集所有嵌入资源,找到正确名称:

    Imports System.Reflection
    
    Dim assembly As Assembly = Assembly.GetExecutingAssembly()
    For Each name In assembly.GetManifestResourceNames()
        Console.WriteLine(name)
    Next
    
  • 验证资源嵌入配置
    右键项目中的File.sym文件→属性,确保:

    • 「生成操作」设置为Embedded Resource
    • 「复制到输出目录」设置为「不复制」(资源已嵌入程序集,无需额外复制)
      确认文件未被排除在项目外,重新生成项目。
  • 修正资源读取代码
    你已获取当前程序集实例,但后续读取时直接调用静态方法,建议改用实例调用,同时增加空值判断:

    Imports System.IO
    Imports System.Reflection
    
    Dim assembly As Assembly = Assembly.GetExecutingAssembly()
    Dim resourceStream As Stream = assembly.GetManifestResourceStream("正确的资源全名")
    
    If resourceStream Is Nothing Then
        Throw New InvalidOperationException("未找到指定的嵌入资源,请检查资源名称是否正确")
    End If
    
    Using reader As New StreamReader(resourceStream)
        Dim line As String
        Do
            line = reader.ReadLine()
            If line Is Nothing Then Exit Do
            
            Dim m = Regex.Match(line, "([^][]*)]")
            If m.Success Then
                Dim mapping As New Mapping()
                mapping.n = m.Groups(1).ToString()
                ' 此处添加mapping对象的后续处理逻辑
            End If
        Loop
    End Using
    

    用Using语句可自动释放StreamReader和Stream资源,避免内存泄漏;增加空值判断能提前抛出明确错误,方便排查。

  • 优化读取循环逻辑
    原代码中Continue Do的写法会导致循环多执行一次,改成Exit Do更合理;同时增加正则匹配成功判断,避免匹配失败时获取空的Group值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:10:34