【问题标题】:GetManifestResourceStream() returning nullGetManifestResourceStream() 返回 null
【发布时间】:2015-06-19 02:10:20
【问题描述】:

我正在尝试在我的应用程序资源中嵌入一些文本文件,但是当我尝试使用 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);

该文件可通过使用Properties.Resources.foo 获得,但当我从字符串中获取文件名时,我无法使用它。

【问题讨论】:

  • 如果不确定,请使用 il spy、reflector 或任何其他 .net 反编译器打开您的程序,并在其中找到正确的资源名称。
  • @Oscar 似乎文本文件放在programName.Properties.Resources.resources 上不应该放在programName.Form1.resources 上而不是?在最后一个上有应用程序的图标和背景之类的东西。我想这就是为什么我得到 null
  • 这取决于您如何创建资源文件。用反编译得到的值试试。
  • 我通过项目 -> 属性 -> 资源 -> 添加现有文件创建/添加了它们。这是正确的方法吗?

标签: c# winforms resources .net-4.5 embedded-resource


【解决方案1】:

确保您的文件的构建操作是“嵌入式资源”。
如果文件在文件夹中,则必须包含文件夹的名称。

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

无论如何,只需使用它来查看您的所有资源

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

【讨论】:

  • 我在哪里检查是否建立行动价值?
  • 我检查了GetManifestResourceNames(),它不包含我添加的文件我想这就是我添加它的方式:项目->属性->资源->添加现有文件。
  • 找到这个属性!需要先打开文件。我在资源编辑器中寻找它。从“无”切换到“嵌入式资源”,它工作了
猜你喜欢
  • 2014-03-05
  • 2014-04-25
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
相关资源
最近更新 更多