当我不希望项目中有松散的文件时,我发现这是一种非常有效的方法。它可以应用于任何组件。
在以下示例中,项目的根目录中有一个名为“MyDocuments”的文件夹,其中有一个名为“Document.pdf”的文件。该文档被标记为嵌入式资源。
您可以像这样访问资源,在调用GetManifestResourceStream()之前先构建命名空间:
Assembly assembly = Assembly.GetExecutingAssembly();
string ns = typeof(Program).Namespace;
string name = String.Format("{0}.MyDocuments.Document.pdf", ns);
using (var stream = assembly.GetManifestResourceStream(name))
{
if (stream == null) return null;
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
return buffer;
}
我发现的唯一问题是名称空间在“。”之后包含数字时。(例如 MyDocuments.462)。当命名空间是数字时,编译器将在前面加上下划线(因此 MyDocuments.462 变为 MyDocuments._462)。