Lectura de archivos XML incrustados c #

¿Cómo puedo leer un archivo XML incrustado, un archivo XML que forma parte del proyecto ac #? He agregado un archivo XML a mi proyecto y quiero leer de él. Quiero que el archivo XML se compile con el proyecto porque no quiero que sea un recurso que el usuario pueda ver.

¿Alguna idea?

  1. Asegúrese de que el archivo XML sea parte de su proyecto .csproj. (Si puede verlo en el explorador de soluciones, está bien).

  2. Establezca la propiedad “Crear acción” para el archivo XML en “Recurso incrustado”.

  3. Use el siguiente código para recuperar el contenido del archivo en tiempo de ejecución:

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

Cuando quiera leer el contenido del archivo, solo use

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

Tenga en cuenta que “assembly.folder” debe reemplazarse con el nombre del proyecto y la carpeta que contiene el archivo de recursos.

Actualizar

En realidad, assembly.folder debería reemplazarse por el espacio de nombres en el que una clase creada en la misma carpeta que el archivo XML tendría de forma predeterminada. Esto es típicamente defaultNamespace.folder0.folder1.folder2.....

También puede agregar el archivo XML como Recurso y luego direccionar su contenido con Resources.YourXMLFilesResourceName (como una cadena, es decir, usando un StringReader).

Establezca Build Action en Embedded Resource, luego escriba lo siguiente:

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

Puede usar Reflector (gratis desde http://www.red-gate.com/products/reflector/ ) para encontrar la ruta al archivo XML incrustado.

Entonces, es solo una cuestión de

 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. Agregue el archivo al proyecto.
  2. Establezca la propiedad “Crear acción” en “Recurso incrustado”.
  3. Acceda de esta manera:

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

Observe que la cadena del nombre del recurso es el nombre del archivo, incluida la extensión, precedida por el espacio de nombre predeterminado del proyecto. Si el recurso está dentro de una carpeta, también debe incluirlo en la cadena.

(de http://www.dotnet247.com/247reference/msgs/1/5704.aspx , pero lo usé pesonally)