读取embedded式XML文件c#

如何从embedded式XML文件读取 – 作为ac#项目一部分的XML文件? 我已经添加了一个XML文件到我的项目,我想读取它。 我想要XML文件与项目编译,因为我不希望它将成为用户可以看到的资源。

任何想法?

  1. 确保XML文件是.csproj项目的一部分。 (如果你可以在解决scheme资源pipe理器中看到它,那就太好了。)

  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; } 

每当你想读取文件内容,只需使用

 string fileContents = GetResourceTextFile("myXmlDoc.xml"); 

请注意,“assembly.folder”应replace为包含资源文件的项目名称和文件夹。

更新

实际上, assembly.folder应该被replace为在默认情况下在XML文件所在的文件夹中创build的类的名称空间。 这通常是defaultNamespace.folder0.folder1.folder2.....

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

将生成操作设置为embedded式资源,然后编写以下内容:

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

您可以使用Reflector(免费从http://www.red-gate.com/products/reflector/ )findembedded式XML文件的path。

那么,这只是一个问题

 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(); 
  1. 将该文件添加到项目。
  2. 将“Bu​​ild Action”属性设置为“Embedded Resource”。
  3. 以这种方式访问​​它:

     GetType().Module.Assembly.GetManifestResourceStream("namespace.folder.file.ext") 

请注意,资源名称string是文件的名称,包括扩展名,前面是项目的默认名称空间。 如果资源位于文件夹内,则还必须将其包含在string中。

(从http://www.dotnet247.com/247reference/msgs/1/5704.aspx ,但我用它pesonally)