Compartir a través de


Recursos en formato de archivo .Resx

Actualización: noviembre 2007

El formato de archivo de recursos .resx consiste en entradas XML, que especifican objetos y cadenas en etiquetas XML. La ventaja que ofrecen los archivos .resx es que al abrirlos en un editor de texto (como Bloc de Notas o Microsoft Word), es posible analizarlos, manipularlos y escribir en ellos. Cuando se ve un archivo .resx, se puede observar realmente la forma binaria de un objeto incrustado (por ejemplo, una imagen) cuando esta información binaria es parte del manifiesto del recurso. Además de ofrecer esta información binaria, los archivos .resx son completamente legibles y susceptibles de mantenimiento.

Nota:

No utilice archivos de recursos para almacenar contraseñas, información relativa a la seguridad o datos privados.

Los archivos .resx contienen información de encabezado estándar, que describe el formato de las entradas de recursos y especifica la información de versión correspondiente al XML utilizado para analizar los datos. En el siguiente ejemplo se muestra un conjunto típico de instrucciones de encabezado de un archivo .resx.

<?xml version="1.0" encoding="utf-8"?>
<root>
    <xsd:schema id="root"  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="data">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0"
                    msdata:Ordinal="2" />
                </xsd:sequence>
                    <xsd:attribute name="name" type="xsd:string" />
                    <xsd:attribute name="type" type="xsd:string" />
                    <xsd:attribute name="mimetype" type="xsd:string" />
            </xsd:complexType>
        </xsd:element>

Después de la información de encabezado, se describe cada entrada como un par de nombre/valor, muy similar a la forma en que se especifican las cadenas en los archivos .txt. Los pares de nombre/valor en el formato .resx se ajustan en código XML, que describe valores de cadena u objeto. Cuando se agrega una cadena a un archivo .resx, se incrusta el nombre de la cadena en una etiqueta <data> y el valor aparece en una etiqueta <value>, tal como se muestra en el siguiente ejemplo.

    <data name="string1">
        <value>hello</value>
    </data>

Cuando se inserta un objeto en un archivo .resx, se utilizan las mismas etiquetas <data> y <value> para describir la entrada, pero la etiqueta <data> incluye un especificador de tipo o especificador de tipo MIME. El especificador de tipo contiene el tipo de datos del objeto que se está guardando. El especificador de tipo MIME contiene el tipo base (Base64) de la información binaria almacenada si el objeto consiste en datos binarios.

Nota:

Todos los archivos .resx utilizan un formateador de serialización binaria para generar y analizar los datos binarios de un tipo especificado. Como resultado, un archivo .resx puede convertirse en un archivo no válido si el formato de serialización binaria de un objeto cambia de manera que sea incompatible.

En el siguiente ejemplo, se muestra un objeto Int32 guardado en un archivo .resx y el inicio de un objeto de mapa de bits, que contiene la información binaria de un archivo .gif real.

    <data name="i1" type="System.Int32, mscorlib">
        <value>20</value>
    </data>

    <data name="flag" type="System.Drawing.Bitmap, System.Drawing,   
    Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
    mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>
            AAEAAAD/////AQAAAAAAAAAMAgAAADtTeX…
        </value>
    </data>

Usar la clase ResXResourceWriter

Se puede usar la clase ResXResourceWriter para crear un archivo .resx directamente a partir de código. En el siguiente ejemplo, se muestra cómo crear un archivo .resx que almacene un archivo .jpg como uno de los recursos del archivo. Cree primero la imagen mediante el método Image.FromFile. A continuación, cree una clase ResXResourceWriter con un nombre de archivo único. Llame al método ResXResourceWriter.AddResource para cada imagen que desee agregar al archivo. Por último, llame al método ResXResourceWriter.Close para escribir la información de imagen en el archivo de recursos y cerrar ResXResourceWriter.

Imports System
Imports System.Drawing
Imports System.Resources

Public Class SampleClass

    Public Sub Main()
        Dim img As Image
        Dim rsxw As ResXResourceWriter
        img = Image.FromFile("en-AU.jpg")
        rsxw = new ResXResourceWriter("en-AU.resx")
        rsxw.AddResource("en-AU.jpg",img)
        rsxw.Close()
    End Sub
End Class
using System;
using System.Drawing;
using System.Resources;
 
public class SampleClass
{
    public static void Main() 
    {
        Image img = Image.FromFile("en-AU.jpg");
        ResXResourceWriter rsxw = new ResXResourceWriter("en-AU.resx"); 
        rsxw.AddResource("en-AU.jpg",img);
        rsxw.Close();
    }
}

Los archivos .resx también se pueden manipular directamente. Sin embargo, para evitar que se dañen los archivos, procure no modificar ninguna información binaria almacenada en dichos archivos.

Si necesita recuperar los nombres y valores de los recursos de un archivo .resx, utilice ResXResourceReader. Para obtener un ejemplo de código que muestra cómo crear ResXResourceReader para un archivo especificado, realizar iteraciones en el archivo e imprimir los nombres y valores de los recursos, vea el tema ResXResourceReader (Clase).

Los archivos .resx no se pueden incrustar en un ejecutable de Common Language Runtime ni se pueden compilar en un ensamblado satélite. El archivo .resx se ha de convertir en un archivo .resources mediante el Generador de archivos de recursos (Resgen.exe). Para obtener más información, vea Recursos en formato de archivo .Resources.

Vea también

Conceptos

Crear archivos de recursos

Recursos en formato de archivo .Resources

Referencia

Generador de archivos de recursos (Resgen.exe)