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

本文关键字:文件 错误 不能 参数 读取 | 更新日期: 2023-09-27 18:13:54

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

我得到错误:

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

代码 中的

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

如何解决这个错误?

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

我发现,在添加文本文件或模板文件来读取电子邮件正文之后,我遇到了这个问题,然后使用以下语法:

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的项目库中。我把value从"Content"改为"Embedded Resource",一切都运行良好。

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

string[] names = Asm.GetManifestResourceNames();
foreach(var name in names) Debug.WriteLine(name);
并查看实际上是什么名称,并相应地调整前缀。如果不完全匹配,您将得到null