Ressourcen im RESX-Dateiformat

Das Ressourcendateiformat .resx besteht aus XML-Einträgen, die Objekte und Zeichenfolgen in XML-Tags angeben. Ein Vorteil der RESX-Datei besteht darin, dass sie mit einem Texteditor (wie der Windows-Editor oder Microsoft Word) geöffnet, bearbeitet und gespeichert werden kann. Bei der Anzeige einer RESX-Datei wird die tatsächliche binäre Form eines eingebetteten Objekts (z. B. eines Bildes) angezeigt, sofern diese binären Informationen Teil des Ressourcenmanifests sind. Abgesehen von diesen binären Informationen kann eine RESX-Datei vollständig gelesen und verwaltet werden.

Hinweis

Verwenden Sie Ressourcendateien nicht, um Kennwörter, sicherheitsrelevante Informationen oder private Daten zu speichern.

Eine RESX-Datei enthält einen Standardsatz mit Headerdaten, die das Format der Ressourceneinträge beschreiben sowie die XML-Versioninginformationen zum Interpretieren der Daten angeben. Im folgenden Beispiel wird ein typischer Satz von Headeranweisungen einer RESX-Datei angezeigt.

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

Nach den Headerdaten folgen Einträge in Form von Name/Werte-Paaren, ähnlich den Zeichenfolgen in einer TXT-Datei. Ein Name/Werte-Paar im RESX-Format wird in XML-Code angegeben, der Zeichenketten- oder Objektwerte beschreibt. Beim Hinzufügen einer Zeichenfolge zu einer RESX-Datei wird der Name der Zeichenfolge in ein <data>-Tag eingebettet und der Wert in ein <value>-Tag eingeschlossen, wie im folgenden Beispiel dargestellt.

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

Beim Einfügen eines Objekts in eine RESX-Datei beschreiben dieselben <data>-Tags und <value>-Tags den Eintrag, aber das <data>-Tag beinhaltet entweder einen Typ- oder einen MIME-Typbezeichner. Der Typbezeichner enthält den gespeicherten Datentyp des Objekts. Der MIME-Typbezeichner enthält den Basistyp (Base64) der zu speichernden binären Informationen, falls das Objekt aus binären Daten besteht.

Hinweis

Alle RESX-Dateien verwenden ein Programm für die binäre Serialisierung, um die Binärdaten für einen bestimmten Typ zu generieren und zu analysieren. Daher kann eine RESX-Datei ungültig werden, wenn das Format für die binäre Serialisierung für ein Objekt auf nicht kompatible Weise geändert wird.

Folgendes Beispiel zeigt ein in einer RESX-Datei gespeichertes Int32-Objekt sowie den Anfang eines Bitmapobjekts, das die binären Informationen einer tatsächlichen GIF-Datei enthält.

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

Verwenden der ResXResourceWriter-Klasse

Mit der ResXResourceWriter-Klasse können Sie eine RESX-Datei direkt aus Code erstellen. Folgendes Beispiel illustriert die Erstellung einer RESX-Datei, die als eine ihrer Ressourcen eine JPG-Datei enthält. Erstellen Sie zunächst das Bild mithilfe der Image.FromFile-Methode. Anschließend erstellen Sie einen ResXResourceWriter mit einem eindeutigen Namen. Rufen Sie für jedes Bild, das Sie zur Datei hinzufügen möchten, die ResXResourceWriter.AddResource-Methode auf. Schließlich können Sie die ResXResourceWriter.Close-Methode aufrufen, um die Bildinformationen in die Ressourcendatei zu schreiben und ResXResourceWriter zu schließen.

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

Sie können eine RESX-Datei auch direkt bearbeiten. Achten Sie jedoch darauf, die in der Datei gespeicherten binären Informationen nicht zu verändern, um die Datei nicht zu beschädigen.

Wenn Sie die Namen und Werte der Ressourcen in einer RESX-Datei abrufen möchten, verwenden Sie einen ResXResourceReader. Ein Codebeispiel, das das Erstellen eines ResXResourceReader für eine bestimmte Datei, das Durchlaufen der Datei und das Ausgeben der Namen und Werte der Ressourcen veranschaulicht, finden Sie unter der ResXResourceReader-Klasse.

Eine RESX-Datei kann nicht in eine Ausführungsdatei von Common Language Runtime eingebettet oder in eine Satellitenassembly kompiliert werden. Sie müssen die RESX-Datei mithilfe von Resource File Generator (Resgen.exe) in eine RESOURCES-Datei konvertieren. Weitere Informationen finden Sie unter Ressourcen im RESOURCES-Dateiformat.

Siehe auch

Referenz

Resource File Generator (Resgen.exe)

Konzepte

Erstellen von Ressourcendateien
Ressourcen im RESOURCES-Dateiformat