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

使用StreamReader读取嵌入资源CSV时出现Value cannot be null错误如何解决

问题根因

你触发空参数异常的核心原因是 assembly.GetManifestResourceStream(resource) 返回了null,导致后续传入StreamReader的stream参数为空。
而返回null的原因是你传入的资源名不符合.NET嵌入资源的默认命名规则:

.NET 会默认使用 {程序集默认命名空间}.{文件相对于项目根目录的路径}.{文件名} 作为嵌入资源的唯一标识名,你当前直接传入文件名open_postcode_geo_snippet.csv无法匹配到已嵌入的资源。

修复方案

  1. 直接修改资源名拼接规则,你的项目默认命名空间是StreamCsv,CSV放在项目根目录,所以修改资源名字符串为:
string resource = "StreamCsv.open_postcode_geo_snippet.csv";
  1. (推荐)用反射动态获取命名空间,避免硬编码后续改命名空间出错:
string resource = $"{typeof(SeedCsv).Namespace}.open_postcode_geo_snippet.csv";

验证方法

如果你不确定正确的资源名,可以在获取资源前添加一行代码打印所有已嵌入的资源名,直接取匹配的即可:

Assembly assembly = Assembly.GetExecutingAssembly();
// 打印所有嵌入资源名,打断点或者控制台输出都可以
var allResources = assembly.GetManifestResourceNames();
foreach (var res in allResources)
{
    Console.WriteLine(res);
}

其他常见踩坑点

  • 如果你的CSV文件放在项目的子文件夹下,比如/Data/open_postcode_geo_snippet.csv,则资源名需要额外加上文件夹名:StreamCsv.Data.open_postcode_geo_snippet.csv
  • 注意文件名大小写,部分运行环境(如Linux、macOS)下资源名是大小写敏感的

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:15:04