Ressources au format de fichier .Resx

Le format de fichier de ressources .resx se compose d'entrées XML, qui spécifient des objets et des chaînes dans des balises XML. L'un des avantages d'un fichier .resx est que lorsqu'il est ouvert avec un éditeur de texte (tel que Bloc-notes ou Microsoft Word) il peut être analysé, manipulé et des données peuvent y être écrites. Lorsque vous affichez un fichier .resx, vous pouvez voir la forme binaire d'un objet incorporé (une image par exemple) lorsque ces informations binaires font partie d'un manifeste de ressources. En dehors des informations binaires, un fichier .resx est lisible et peut être tenu à jour.

Notes

N'utilisez pas de fichiers de ressources pour stocker des mots de passe, des informations sensibles ou des données privées.

Un fichier .resx contient un ensemble standard d'informations d'en-tête, qui décrit le format des entrées de ressources et spécifie les informations de versioning pour le XML utilisé pour analyser les données. L'exemple suivant illustre un ensemble d'instructions d'en-tête standard dans un fichier .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>

À la suite des informations d'en-tête, chaque entrée est décrite comme une paire nom/valeur, qui ressemble beaucoup à la façon dont les chaînes sont spécifiées dans un fichier .txt. Une paire nom/valeur dans un fichier .resx est encapsulée dans le code XML, qui décrit les valeurs chaîne ou objet. Lorsqu'une chaîne est ajoutée à un fichier .resx, le nom de la chaîne est incorporé dans une balise <data> et la valeur est comprise entre des balises <value>, comme dans l'exemple suivant.

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

Lorsqu'un objet est inséré dans un fichier .resx, ces balises <data> et <value> sont utilisées pour décrire l'entrée, mais la balise <data> comprend un type ou un spécificateur de type MIME. Le spécificateur de type contient le type de données de l'objet enregistré. Le spécificateur de type MIME contient le type de base (Base64) des informations binaires stockées, si l'objet se compose de données binaires.

Notes

Tous les fichiers .resx utilisent un formateur de sérialisation binaire pour générer et analyser les données binaires d'un type spécifié.Par conséquent, un fichier .resx peut devenir non valide si le format de sérialisation binaire d'un objet change d'une manière non compatible.

L'exemple suivant illustre un objet Int32 enregistré dans un fichier .resx et le début d'un objet bitmap, qui contient les informations binaires à partir d'un fichier .gif réel.

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

Utilisation de la classe ResXResourceWriter

Vous pouvez utiliser la classe ResXResourceWriter pour créer un fichier .resx directement à partir du code. L'exemple suivant montre comment créer un fichier .resx qui stocke un fichier .jpg comme l'une des ressources dans le fichier. Créez tout d'abord l'image en utilisant la méthode Image.FromFile. Ensuite, créez ResXResourceWriter avec un nom de fichier unique. Appelez la méthode ResXResourceWriter.AddResource pour chaque image à ajouter au fichier. Pour finir, appelez la méthode ResXResourceWriter.Close pour écrire les informations sur l'image dans le fichier de ressources et fermer 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();
    }
}

Vous pouvez également manipuler directement un fichier .resx. Cependant, pour éviter d'endommager le fichier, faites attention à ne pas modifier les informations binaires stockées dans le fichier.

Si vous devez récupérer les noms et les valeurs des ressources dans un fichier .resx, utilisez ResXResourceReader. Pour obtenir un exemple de code qui montre comment créer ResXResourceReader pour un fichier spécifié, itérer au sein du fichier et imprimer les noms et les valeurs des ressources, consultez la rubrique ResXResourceReader, classe.

Vous ne pouvez pas incorporer un fichier .resx dans un exécutable runtime ou le compiler dans un assembly satellite. Vous devez convertir votre fichier .resx en fichier .resources en utilisant l'outil Resource File Generator Tool (Resgen.exe). Pour plus d'informations, consultez Ressources dans un fichier au format .Resources.

Voir aussi

Référence

Resgen.exe (Resource File Generator)

Concepts

Création de fichiers de ressources

Ressources au format de fichier .Resources