Zeichenfolgenressourcen
Zum Erstellen einer Zeichenfolgenressource müssen Sie nur die drei folgenden Schritte ausführen:
Erstellen Sie eine Textdatei mit einem Name-Wert-Eintrag für jede Zeichenfolge.
Konvertieren Sie die Textdatei mit Hilfe der Resgen.exe in eine RESOURCES-Datei.
Erstellen Sie eine DLL, und betten Sie die RESOURCES-Datei mit dem Assembly Generation-Tool (AL) oder einem der Sprachcompiler ein, die mit .NET Framework SDK geliefert wurden.
**Hinweis **Weitere Informationen zum AL finden Sie in Anhang B: Ressourcentools.
Wenn die Zeichenfolgen für Kulturen lokalisiert werden, die nicht dem Standardwert entsprechen, müssen Sie die vorhergehenden drei Schritte für jede der Kulturen sowie für eine sprachneutrale Standardkultur durchführen. Sie müssen die Kultur bei Verwendung von AL ebenfalls angeben.
Auflistung 1. Beispieltextdatei mit Zeichenfolgen (MyStrings.txt)
; Sample strings for the calculator – Default locale
;
Math_Greeting = Welcome – Integer Calculator
Math_Formula_Label = Formula and Results:
Math_Clear_Button = Clear
Math_Calc_Button = Calculate
Math_Calc_Error = Invalid Formula. Please try again.
Resgen.exe konvertiert zwischen den drei Ressourcendateiformaten: Zeichenfolgen (TXT-Datei), XML-Ressourcen (RESX-Datei) und kompilierte Dateien (RESOURCES-Datei). Zum Kompilieren der Ressourcendatei MyStrings.txt verwenden Sie den folgenden Befehl, um eine kompilierte Zwischendatei mit mehreren Ressourcen zu generieren:
resgen MyStrings.txt MyStrings.resources
An dieser Stelle haben Sie drei Verpackungsmöglichkeiten: Einbetten der Ressourcen in die ausführbare Assembly, Erstellen von Satellitenassemblies, die nur Ressourcen enthalten, oder Belassen der Ressourcen in der RESOURCES-Datei und direkter Zugriff auf die Ressourcen. Die letzte Option ist meist für Tools nützlich; echte Anwendungen sollten Assemblies verwenden, um die Vorteile von Signaturen und Versionsüberprüfungen nutzen zu können.
Für viele Anwendungen, insbesondere für die nicht lokalisierten Anwendungen, reicht es aus, die Ressourcen in die ausführbare Assembly einzubetten. Dies erfolgt bei der Kompilierung mit dem Schalter /res und der folgenden Syntax:
(csc|vbc) ... /out:WorldCalc.exe /res:MyStrings.resources WorldCalc.cs
**Hinweis **Die Parameter /target, /addmodule, /a und /r wurden aus Gründen der Übersichtlichkeit in der vorhergehenden Zeile weggelassen.
Mit der vorhergehenden Befehlszeile wird WorldCalc.cs zu WorldCalc.exe kompiliert, und die Ressourcen der Datei MyStrings.resources werden eingebettet. Wenn Sie die Ressourcen in eine separate DLL stellen möchten, könnten Sie einen Befehl ähnlich dem folgenden eingeben:
al /out:WorldCalc.Resources.DLL /embed:MyStrings.resources,MyStrings.resources,Private
Verwenden Sie folgende Syntax für den /embed-Parameter:
/embed:<filename>[,<name>[,Private]
Die Parameter werden in Folgenden beschrieben.
<filename> – Der Name der RESOURCES-Datei.
<name> – Der interne Name für die Ressourcen. In der Regel wird er beim Erstellen einer ResourceManager-Klasse verwendet. Im Allgemeinen umfasst er einen Namespace.
Private – Gibt an, ob die Ressourcen für andere Assemblies sichtbar sind. (Der Standardwert ist no.)
**Hinweis **Verwenden Sie besser den /link-Parameter als den /embed-Parameter. Damit wird die Ressourcenassembly-DLL erstellt, die das Manifest enthält. Diese DLL besitzt aber einen Link zur RESOURCES-Datei und bettet die Ressourcen selbst nicht ein.
Erstellen von Ressourcen mit Hilfe von Code
Sie können RESOURCES-Dateien mit Hilfe von Code direkt erstellen. Diese Technik ist nützlich, wenn Sie die Generierung von entsprechend formatierten Ressourcen automatisieren, insbesondere wenn die Ressourcen in einer Datenbank gespeichert werden oder von einem anderen System migriert wurden, z. B. einem System, das ältere Tabellen für Win32-Zeichenressourcen verwendet. Zum Erstellen einer RESOURCES-Datei erstellen Sie einen ResourceWriter mit einem eindeutigen Dateinamen. Rufen Sie mindestens einmal AddResource auf. Rufen Sie anschließend Close auf (das implizit Generate aufruft), um die Datei zu schließen. Das folgende kleine Programm veranschaulicht die Verwendung eines ResourceWriter zum Erstellen einer RESOURCES-Datei mit fünf Einträgen.
Auflistung 2a. Erstellen und Lesen von RESOURCE-Dateien (ResWrite.cs)
using System;
using System.Collections;
using System.Resources;
class MainApp {
public static void Main() {
// First create the resource file and add strings.
IResourceWriter rw = new ResourceWriter("sample.resources");
rw.AddResource("test1", "one");
rw.AddResource("test2", "two");
rw.AddResource("test3", "three");
rw.AddResource("test4", "four");
rw.AddResource("test5", 512341234);
rw.Close();
...
}
}
Auflistung 2b. Erstellen und Lesen von RESOURCE-Dateien (ResWrite.vb)
Imports System
Imports System.Collections
Imports System.Resources
Class MainApp
Public Shared Sub Main()
' First create the resource file and add strings.
Dim rw As ResourceWriter = New ResourceWriter("sample.resources")
rw.AddResource("test1", "one")
rw.AddResource("test2", "two")
rw.AddResource("test3", "three")
rw.AddResource("test4", "four")
rw.AddResource("test5", 512341234)
rw.Close()
...
End Sub
End Class
**Hinweis **Sie müssen dies einem IResourceWriter zuweisen, um sicherzustellen, dass der Code auch mit anderen ResourceWriter-Klassen funktioniert, die dieselben Schnittstellen unterstützen.
Die Ressourcen lassen sich am einfachsten aus einer Datei abrufen, wenn sie mit der ResourceReader-Klasse durchlaufen werden. Auf der Basis des vorhergehenden Codes ist zum Auflisten der geschriebenen Ressourcen der folgende Mindestcode erforderlich (dieser stammt aus den Programmdateien ResWrite.cs und ResWrite.vb):
Auflistung 3a. Durchlaufen mit ResourceReader (ResWrite.cs)
...
// Iterate through the resources.
IResourceReader rr = new ResourceReader("sample.resources");
IDictionaryEnumerator de = rr.GetEnumerator();
while (de.MoveNext()) {
Console.WriteLine(de.Key + " " + de.Value);
}
rr.Close();
...
Auflistung 3a. Durchlaufen mit ResourceReader (ResWrite.vb)
...
' Iterate through the resources.
Dim rr As ResourceReader = New ResourceReader("sample.resources")
Dim de As IDictionaryEnumerator = rr.GetEnumerator()
While de.MoveNext()
Console.WriteLine((de.Key.ToString() + " " + de.Value.ToString()))
End While
rr.Close()
...
In diesem kleinen Beispiel haben Sie zuerst einen ResourceReader für eine zuvor angelegte RESOURCES-Datei erstellt. Wie beim Schreiben der Ressourcen haben Sie diesen auf Grund einer höheren Flexibilität einem IResourceReader zugewiesen. Sie haben anschließend die Ressourcen mit einem DictionaryEnumerator durchlaufen und den Ressourcennamen sowie den entsprechenden Wert an der Konsole ausgegeben.
Obwohl Sie durch die direkte Nutzung eines ResourceReader die Ressourcen auflisten können, ist es nicht möglich, bestimmte Ressourcen durch Angabe eines Eintrags direkt abzurufen. Verwenden Sie für diese Aufgabe den leistungsstarken ResourceManager, der im Abschnitt Abrufen von Ressourcen mit Hilfe von Code beschrieben ist.
Siehe auch
Bildressourcen | Verpacken von Ressourcen | Abrufen von Ressourcen mit Hilfe von Code | Ressourcen – Zusammenfassung | Anhang A: Weitere Ressourceninformationen | Anhang B: Ressourcentools