读取嵌入式XML文件c#

Pil*_*ila 60 c# xml

如何从嵌入式XML文件中读取 - 一个属于ac#项目的XML文件?我已经在我的项目中添加了一个XML文件,我想从中读取它.我希望XML文件能够与项目一起编译,因为我不希望它成为用户可以看到的资源.

任何的想法?

3Da*_*ave 96

  1. 确保XML文件是.csproj项目的一部分.(如果您可以在解决方案资源管理器中看到它,那就很好.)

  2. 将XML文件的"Build Action"属性设置为"Embedded Resource".

  3. 使用以下代码在运行时检索文件内容:

    public string GetResourceTextFile(string filename)
    {
        string result = string.Empty;
    
        using (Stream stream = this.GetType().Assembly.
                   GetManifestResourceStream("assembly.folder."+filename))
        {
            using (StreamReader sr = new StreamReader(stream))
            {
                result = sr.ReadToEnd();
            }
        }
        return result;
    }
    
    Run Code Online (Sandbox Code Playgroud)

每当您想要阅读文件内容时,只需使用即可

string fileContents = GetResourceTextFile("myXmlDoc.xml");
Run Code Online (Sandbox Code Playgroud)

请注意,"assembly.folder"应替换为包含资源文件的项目名称和文件夹.

更新

实际上,assembly.folder应该替换为默认情况下在与XML文件相同的文件夹中创建的类的命名空间.这通常是defaultNamespace.folder0.folder1.folder2......

  • 如果需要列出所有加载的资源,只需查看`GetType().Assembly.GetManifestResourceNames()` (8认同)
  • 答案结尾处的"注释"似乎不正确.请参阅此答案(http://stackoverflow.com/a/3314213/940783),其中说明您应该输入项目的默认命名空间,而不仅仅是项目名称.只使用项目的程序集名称对我不起作用. (4认同)

sun*_*ide 30

您还可以将XML文件添加为资源,然后使用Resources.YourXMLFilesResourceName(作为字符串,即使用StringReader)来处理其内容.

  • 那要容易得多! (3认同)
  • 对不起,'资源'来自哪里? (2认同)

SLa*_*aks 13

将Build Action设置为Embedded Resource,然后编写以下内容:

using (Stream stream = typeof(MyClass).Assembly.GetManifestResourceStream("MyNameSpace.Something.xml")) {
    //Read the stream
}
Run Code Online (Sandbox Code Playgroud)


Jam*_*mie 8

您可以使用Reflector(从http://www.red-gate.com/products/reflector/免费)查找嵌入式XML文件的路径.

然后,这只是一个问题

Assembly a = typeof(Assembly.Namespace.Class).Assembly;

Stream s = a.GetManifestResourceStream("Assembly.Namespace.Path.To.File.xml");
XmlDocument mappingFile = new XmlDocument();
mappingFile.Load(s);
s.Close();
Run Code Online (Sandbox Code Playgroud)

  • 您应该使用`using`语句关闭流. (4认同)