我有一个我需要在运行时访问的文件,我已将它包含在我的项目中并将其设置为嵌入式资源(它实际上是一个源文件,我将扩展名更改为.cs。 txt绕过VS试图编译它。这不重要,但我还是提到它,以防万一)。 当我尝试获取文件时
var assembly = Assembly.GetExecutingAssembly();
Stream stream = assembly.GetManifestResourceStream(resourceName);
我得到一个null。我已经确定我使用了Namespace.Folder.Filename表示法,但这并没有帮助。看来该文件实际上并不存在,因为当我调用
时assembly.GetManifestResourceNames();
我得到一个空字符串数组。知道可能是什么情况吗?
答案 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的建议。