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

pav*_*van 5 c#

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

我收到错误:

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

在代码中

Stream strm = Asm.GetManifestResourceStream(Asm.GetName().Name + "." + Name);
Run Code Online (Sandbox Code Playgroud)

如何解决这个错误?

小智 8

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

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();
}
Run Code Online (Sandbox Code Playgroud)

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

  • 将 Visual Studio 中文件属性上的构建操作更改为“嵌入式资源”为我解决了这个问题。谢谢。 (3认同)

Mar*_*ell 6

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

string[] names = Asm.GetManifestResourceNames();
foreach(var name in names) Debug.WriteLine(name);
Run Code Online (Sandbox Code Playgroud)

并查看名称实际是什么,并相应地调整前缀。null如果它不是一个完整的匹配,你会得到。