值不能为null。参数名称:读取嵌入文件内容时出现流错误

时间:2011-11-07 06:31:56

标签: c#

我在c#中做了一个应用程序。

我收到错误:

  

值不能为空。参数名称:读取嵌入文件的内容x时的流

代码中的

Stream strm = Asm.GetManifestResourceStream(Asm.GetName().Name + "." + Name);

如何解决此错误?

2 个答案:

答案 0 :(得分:4)

嵌入资源的前缀不是程序集名称,而是:项目中指定的默认命名空间。不过,你最好的策略是看:

string[] names = Asm.GetManifestResourceNames();
foreach(var name in names) Debug.WriteLine(name);

并查看名称​​实际的内容,并相应地调整前缀。如果不完全匹配,您将获得null

答案 1 :(得分:1)

我发现的是,在添加文本文件或模板文件以读取电子邮件正文后,我遇到此问题,而不是使用以下方法读取该模板文件的路径 语法如下:

Assembly asm = Assembly.GetExecutingAssembly();
string assemblyName = asm.GetName().Name;
string emailTemplateName = xyz.tt;
emailTemplateName = assemblyName + "." +  emailTemplateName;
using (StreamReader reader = new StreamReader(asm.GetManifestResourceStream(emailTemplateName)))
{
body = reader.ReadToEnd();
}

默认情况下,该文件会添加到项目库中,其属性为“Build Action”= Content。我将值从“内容”更改为“嵌入式资源”,一切运行良好。