Risorse in formato di file RESX

Il formato di file di risorse RESX è costituito da voci XML che specificano oggetti e stringhe all'interno di tag XML. Uno dei vantaggi di questo tipo di file è costituito dal fatto che quando il file viene aperto con un editor di testo, come il Blocco note o Microsoft Word, è possibile effettuarvi operazioni di scrittura, analisi e modifica. Quando si visualizza un file RESX, è effettivamente possibile vedere la forma binaria di un oggetto incorporato, ad esempio un'immagine, quando le informazioni binarie fanno parte del manifesto della risorsa. A parte le informazioni binarie, un file RESX è completamente leggibile e gestibile.

Nota

Non utilizzare file di risorse per archiviare password, informazioni riservate o dati personali.

Un file RESX contiene un gruppo standard di informazioni di intestazione che descrivono il formato delle voci di risorsa e specificano informazioni sulla versione del codice XML utilizzato per l'analisi dei dati. Nell'esempio riportato di seguito viene illustrato l'aspetto di un tipico gruppo di istruzioni di intestazione di un file 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>

Dopo le informazioni di intestazione, ciascuna voce si presenta come coppia nome/valore, analogamente al modo in cui vengono specificate le stringhe in un file TXT. Nel formato RESX le coppie nome/valore vengono racchiuse in codice XML che descrive valori di oggetto o di stringa. Quando si aggiunge una stringa a un file RESX, il nome della stringa viene incorporato in un tag <data> e il valore viene racchiuso in un tag <value>, come nell'esempio che segue.

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

Quando in un file RESX viene inserito un oggetto, per descrivere la voce vengono utilizzati gli stessi tag <data> e <value>, ma il tag <data> include uno specificatore di tipo o uno specificatore di tipo MIME. Lo specificatore di tipo conserva il tipo di dati dell'oggetto salvato. Lo specificatore di tipo MIME conserva il tipo di base (Base64) delle informazioni binarie archiviate, se l'oggetto è costituito da dati binari.

Nota

Tutti i file RESX utilizzano un formattatore di serializzazione binario per generare e analizzare i dati binari relativi a un tipo specifico.Di conseguenza, un file RESX può perdere di validità se il formato di serializzazione binario di un oggetto diventa incompatibile.

Nell'esempio riportato di seguito vengono mostrati un oggetto Int32 salvato in un file RESX e l'inizio di un oggetto bitmap, che conserva le informazioni binarie di un file GIF.

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

Utilizzo della classe ResXResourceWriter

La classe ResXResourceWriter può essere utilizzata per creare un file con estensione resx direttamente da codice. Nell'esempio riportato di seguito viene illustrato come creare un file RESX in cui sia archiviato, tra le altre risorse, un file JPG. Creare l'immagine utilizzando il metodo Image.FromFile. Successivamente, creare una classe ResXResourceWriter specificando un nome di file univoco. Chiamare il metodo ResXResourceWriter.AddResource per ciascuna immagine da aggiungere al file. Chiamare infine il metodo ResXResourceWriter.Close per scrivere le informazioni relative all'immagine nel file di risorse e chiudere l'oggetto 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();
    }
}

È anche possibile modificare un file RESX direttamente. Per evitare che il file venga danneggiato, occorre tuttavia non modificare alcuna informazione binaria in esso contenuta.

Quando è necessario recuperare i nomi e i valori delle risorse in un file resx, utilizzare un oggetto ResXResourceReader. Per un esempio di codice in cui viene illustrato come creare una classe ResXResourceReader per un file specifico, scorrere il file e visualizzare i nomi e i valori delle risorse, vedere Classe ResXResourceReader.

Non è possibile incorporare un file RESX in un eseguibile di runtime o compilarlo in un assembly satellite. È necessario convertire il file RESX in un file RESOURCES utilizzando Generatore di file di risorse (Resgen.exe). Per ulteriori informazioni, vedere Risorse in formato di file RESOURCES.

Vedere anche

Riferimenti

Resgen.exe (generatore di file di risorse)

Concetti

Creazione di file di risorse

Risorse in formato di file RESOURCES