3

现在我在一个班上有几个:

string upgrade_file 
    = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream(
        Assembly.GetExecutingAssembly().GetName().Name 
        + ".schemas.template.db_upgrades.txt")
        ).ReadToEnd();

我可以编写一个包装函数来简化对嵌入式资源的访问(如果必须的话,我会这样做),但是有没有更简单或更优雅的方式来使用 .Net 本地访问它们?

例如,我觉得奇怪的是 GetManifestResourceStream(...) 不是静态的。另一个例子:是否有一些方法返回一个字符串而不是文本文件的流?

更新 1

需要明确的是,我在子目录中有文本文件,我想要:

  1. 这些文件仍然是单独的文件(例如,能够单独对它们进行源代码控制)
  2. 这些文件仍然是嵌入资源,即与程序集一起编译。

现在我正在这样做,如图所示: 在此处输入图像描述

更新 2

我没有设法使用答案中的任何内容来简化对文件的访问。

这是我现在使用的辅助方法,以防其他人发现它有用:

/// <summary>
/// Get the content of a text file embedded in the enclosing assembly.
/// </summary>
/// <param name="resource">The "path" to the text file in the format 
/// (e.g. subdir1.subdir2.thefile.txt)</param>
/// <returns>The file content</returns>
static string GetEmbeddedTextFile(string resource)
{
    return new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream(
        Assembly.GetExecutingAssembly().GetName().Name + "." + resource)).ReadToEnd();
}
4

4 回答 4

0

我的项目中有一个名为的资源文件,Resource1其中包含一个 TXT 文件和一个二进制文件。
我能做到

string str = Resource1.TxtFile;
byte[] file = Resource1.BinaryFile;
于 2012-04-12T21:23:08.107 回答
0

您是否知道在 VS 中,如果您有一个 Resources.resx 文件,它会生成一个真正的类的代码?您可以查看并直接使用它,无需任何元操作。

如果您双击 Rsources.resx 文件并打开设计器,您可以找到一个下拉列表,如果您需要,则将生成的类的访问权限从内部更改为公共。

于 2012-04-12T21:31:35.933 回答
0

我个人的方法是为 Assembly 类编写一个扩展,因为这似乎是一个无论如何都应该包含在该类中的方法。

因此,如上所述,首先确保您的文本文件被标记为“嵌入式资源”,然后使用类似于以下的代码:

public static class Extensions
{
    public static string ReadTextResource(this Assembly asm, string resName)
    {
        string text;
        using (Stream strm = asm.GetManifestResourceStream(resName))
        {
            using (StreamReader sr = new StreamReader(strm))
            {
                text = sr.ReadToEnd();
            }
        }
        return text;
    }
}

这允许您从 DLL 或您希望使用如下代码的任何程序集加载它:

        string content = Assembly.GetExecutingAssembly().ReadTextResource(myResourceName);

(上面可以更简洁地编码,但我使用这个是为了演示)

于 2017-04-13T13:30:43.743 回答
-2
string upgrade_file  = Resources.db_upgrades.txt
于 2012-04-12T21:25:26.613 回答