嵌入式资源文件在运行时不存在.Net 4

时间:2014-09-10 19:28:59

标签: c# .net-assembly embedded-resource

我有一个我需要在运行时访问的文件,我已将它包含在我的项目中并将其设置为嵌入式资源(它实际上是一个源文件,我将扩展名更改为.cs。 txt绕过VS试图编译它。这不重要,但我还是提到它,以防万一)。 当我尝试获取文件时

var assembly = Assembly.GetExecutingAssembly();
Stream stream = assembly.GetManifestResourceStream(resourceName);

我得到一个null。我已经确定我使用了Namespace.Folder.Filename表示法,但这并没有帮助。看来该文件实际上并不存在,因为当我调用

assembly.GetManifestResourceNames();

我得到一个空字符串数组。知道可能是什么情况吗?

2 个答案:

答案 0 :(得分:2)

我很欣赏这是一个旧线程,但我今天早上发现的内容可能对其他人有用。

我有一个资源,其中文件名中有多个点...

示例文件名:data.txt.dat

var resources = asm.GetManifestResourceNames(); // None found (empty array)

重命名为data.txt(仍然只是项目配置中的嵌入资源

var resources = asm.GetManifestResourceNames(); // Entry found ("Assembly.Namespace.data.txt")

所以可能有一些关于 multiple 的限制。名字中的字符

答案 1 :(得分:1)

所以我通过使用VS资源管理器解决了这个问题。现在我可以像这样直接访问文件:

MyNamespace.Properties.Resources.MyFile

我建议任何人使用这种方法,因为它看起来不仅更清洁,而且更安全。感谢Hans Passant的建议。