C# GetManifestResourceStream()返回null

C# GetManifestResourceStream()返回null,c#,winforms,resources,.net-4.5,embedded-resource,C#,Winforms,Resources,.net 4.5,Embedded Resource,我试图在应用程序的资源中嵌入一些文本文件,但当我尝试使用GetManifestResourceStream()检索它时,我得到了null。我试过所有这些名字组合: programName.Form1.foo.txt programName.foo.txt Form1.foo.txt programName.Properties.Resources.Resources.foo.txt 一些信息: 名称空间是programName,我从中调用此代码的类是Form1,我试图检索的文件名资源是foo

我试图在应用程序的资源中嵌入一些文本文件,但当我尝试使用
GetManifestResourceStream()
检索它时,我得到了null。我试过所有这些名字组合:

  • programName.Form1.foo.txt
  • programName.foo.txt
  • Form1.foo.txt
  • programName.Properties.Resources.Resources.foo.txt
一些信息:

名称空间是
programName
,我从中调用此代码的类是
Form1
,我试图检索的文件名资源是
foo.txt

守则:

var resourceName = string.Format("???.{0}", filename);
var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName);

通过使用
属性.Resources.foo
可以使用该文件,但由于我从字符串中获取文件名,因此无法使用该文件。

请确保文件的生成操作是“嵌入资源”。
如果文件位于文件夹中,则必须包含文件夹的名称

例如,如果我在WindowsFormsApplication1项目中创建一个文件夹“xx”,并添加一个文件“dictionary.txt”,则名称将为 WindowsFormsApplication1.xx.dictionary.txt

在任何情况下,只需使用此查看您的所有资源

var files = Assembly.GetExecutingAssembly().GetManifestResourceNames();

确保文件的生成操作为“嵌入式资源”。
如果文件位于文件夹中,则必须包含文件夹的名称

例如,如果我在WindowsFormsApplication1项目中创建一个文件夹“xx”,并添加一个文件“dictionary.txt”,则名称将为 WindowsFormsApplication1.xx.dictionary.txt

在任何情况下,只需使用此查看您的所有资源

var files = Assembly.GetExecutingAssembly().GetManifestResourceNames();

如果不确定,请使用il spy、reflector或任何其他.net反编译器打开您的程序,并在那里找到正确的资源名称。@奥斯卡文本文件似乎放在
programName.Properties.Resources.Resources
上,而不应放在
programName.Form1.Resources
上?在最后一个页面上,有一些东西,比如应用程序的图标和背景。我想这就是为什么我会得到null,这取决于你是如何创建资源文件的。尝试使用从反编译中获得的值。我通过项目->属性->资源->添加现有文件创建/添加了它们。这是正确的方法吗?如果不确定,请使用il spy、reflector或任何其他.net反编译器打开您的程序,并在那里找到正确的资源名称。@Oscar文本文件似乎放在
programName.Properties.Resources.Resources
上而不是
programName.Form1.Resources
上?在最后一个页面上,有一些东西,比如应用程序的图标和背景。我想这就是为什么我会得到null,这取决于你是如何创建资源文件的。尝试使用从反编译中获得的值。我通过项目->属性->资源->添加现有文件创建/添加了它们。这是正确的方法吗?我应该在哪里检查te构建操作值?我已经检查了
GetManifestResourceNames()
,它不包含我添加的文件,我想这是我添加它的方法:项目->属性->资源->添加现有文件。找到了这个属性!需要先打开文件。我在资源编辑那里找的。从“none”切换到“Embedded Resource”,它就工作了。我在哪里检查生成操作值?我已经检查了
GetManifestResourceNames()
,它不包含我添加的文件。我想这就是我添加它的方式:项目->属性->资源->添加现有文件。找到了这个属性!需要先打开文件。我在资源编辑那里找的。从“无”切换到“嵌入式资源”,它就工作了