Freigeben über


Abrufen von Ressourcen in Satellitenassemblys

Aktualisiert: November 2007

Es empfiehlt sich, die Ressourcen für die neutrale oder Standardassembly mit der Hauptassembly zu verpacken und für jede Sprache, die von der Anwendung unterstützt wird, eine separate Satellitenassembly zu erstellen. Die ResourceManager-Klasse stellt den Zugriff auf kulturabhängige Ressourcen zur Laufzeit zur Verfügung und steuert, wie Anwendungen mithilfe des Ressourcenfallback-Prozesses Ressourcen abrufen. Weitere Informationen finden Sie im untergeordneten Thema "Ressourcenfallback-Prozess" des Themas Verpacken und Bereitstellen von Ressourcen. Es wird empfohlen, auf Ressourcen über einen der Konstruktoren für die ResourceManager-Klasse zuzugreifen. Dazu müssen die Ressourcen entweder in Satellitenassemblys kompiliert werden oder ein Teil der Hauptassembly der Anwendung sein.

ResourceManager legt fest, welche Ressourcen anhand der CultureInfo.CurrentUICulture-Eigenschaft des aktuellen Threads abgerufen werden. Wenn Sie beispielsweise eine Anwendung mit der Standardsprachressource "Englisch" und zwei Satellitenassemblys mit Ressourcen für Französisch und Deutsch kompiliert sowie für die CurrentUICulture-Eigenschaft "de" festgelegt haben, ruft ResourceManager die deutsche Ressource ab. Weitere Informationen zum Festlegen der CurrentUICulture-Eigenschaft finden Sie unter Verwenden der CurrentUICulture-Eigenschaft.

Im folgenden Beispiel wird die ResourceManager.GetString-Methode verwendet, um eine Zeichenfolgenressource abzurufen und anzuzeigen.

…
Dim private rm As ResourceManager
rm = New ResourceManager("MyStrings", Me.GetType().Assembly)
Console.Writeline(rm.GetString("string1"))
…
…
private ResourceManager rm;
rm = new ResourceManager("MyStrings", this.GetType().Assembly);
Console.Writeline(rm.GetString("string1"));
…

Mit diesem Code wird string1 aus der Datei MyStrings abgerufen und angezeigt. Welche Zeichenfolge tatsächlich geladen wird, hängt von der aktuellen CurrentUICulture-Eigenschaft ab.

Im folgenden Beispiel wird die ResourceManager.GetObject-Methode verwendet, um eine binäre Ressource (z. B. ein Bild) abzurufen und anzuzeigen.

…
Dim private rm As ResourceManager
rm = New ResourceManager("MyImages", Me.GetType().Assembly)
PictureBox.Image = Ctype(rm.GetObject("MyObject"), System.Drawing.Image)
…
…
private ResourceManager rm;
rm = new ResourceManager("MyImages", this.GetType().Assembly);
PictureBox.Image = (System.Drawing.Image)rm.GetObject("MyObject");
…

Mit diesem Code wird das Objekt MyObject aus der Ressourcendatei MyImages geladen. Es wandelt MyObject in einen Bild-Typ um und weist diesem die Bildeigenschaft PictureBox zu. Welches Objekt tatsächlich geladen wird, hängt von der aktuellen CurrentUICulture-Eigenschaft ab.

Die ResourceSet-Klasse speichert alle Ressourcen, die für eine einzelne Kultur lokalisiert wurden. Ein ResourceSet verwendet nicht den Ressourcenfallback-Prozess. Daher ist ResourceSet für lokalisierte Anwendungen weniger empfehlenswert.

Versioningunterstützung für Satellitenassemblys

Standardmäßig sucht ResourceManager beim Abrufen angefragter Ressourcen nach Satellitenassemblys mit einer Versionsnummer, die mit der Versionsnummer der Hauptassembly übereinstimmt. Nachdem Sie eine Anwendung bereitgestellt haben, möchten Sie möglicherweise die Hauptassembly oder spezifische Ressourcensatellitenassemblys aktualisieren. .NET Framework unterstützt Versionskontrolle der Hauptassembly und der Satellitenassemblys.

Die SatelliteContractVersionAttribute-Klasse bietet Versionsunterstützung für eine Hauptassembly. Wenn Sie das SatelliteContractVersionAttribute für die Hauptassembly einer Anwendung angeben, können Sie diese aktualisieren und erneut bereitstellen, ohne die Satellitenassemblys aktualisieren zu müssen. Erhöhen Sie nach dem Aktualisieren der Hauptassembly deren Versionsnummer, behalten Sie jedoch die Satellitenvertragsversionsnummer bei. Wenn ResourceManager angefragte Ressourcen abruft, wird die Satellitenassemblyversion geladen, die durch dieses Attribut festgelegt ist.

Herausgeberrichtlinienassemblys unterstützen Versioning bei Satellitenassemblys. Sie können eine Satellitenassembly aktualisieren und erneut bereitstellen, ohne die Hauptassembly zu aktualisieren. Nach dem Aktualisieren der Hauptassembly inkrementieren Sie deren Versionsnummer und versenden sie zusammen mit einer Assembly für Herausgeberrichtlinien. Geben Sie in der Assembly für Herausgeberrichtlinien an, dass die neue Satellitenassembly mit der Vorgängerversion abwärtskompatibel ist. Obwohl ResourceManager die bestehende Satellitenvertrags-Versionsnummer der Hauptassembly zum Abrufen angeforderter Ressourcen verwendet, wird dennoch die korrekt aktualisierte Version der Assembly abgerufen, da beim Laden der Assembly die in der Assembly für Herausgeberrichtlinien angegebene Satellitenassemblyversion eingebunden wird. Weitere Informationen über Herausgeberrichtlinienassemblys finden Sie unter Erstellen einer Herausgeberrichtliniendatei.

Wenn Sie die vollständige Versioningunterstützung aktivieren möchten, empfiehlt es sich, Assemblys mit starkem Namen im globalen Assemblycache und Assemblys ohne starken Namen im Anwendungsverzeichnis weiterzugeben. Wenn Sie Assemblys mit starkem Namen im Anwendungsverzeichnis bereitstellen möchten, können Sie beim Aktualisieren der Assembly die Versionsnummer einer Assembly nicht erhöhen. Stattdessen müssen Sie eine Ersetzungsaktualisierung vornehmen, bei der Sie den vorhandenen Code durch den aktualisierten Code ersetzen und die gleiche Versionsnummer beibehalten. Wenn Sie beispielsweise Version 1.0.0.0 einer Satellitenassembly mit dem vollständig gekennzeichneten Assemblyname "myApp.resources, Version=1.0.0.0, Culture=de, PublicKeyToken=b03f5f11d50a3a" aktualisieren möchten, überschreiben Sie sie mit der aktualisierten myApp.resources.dll, die mit dem gleichen vollständig gekennzeichneten Assemblynamen "myApp.resources, Version=1.0.0.0, Culture=de, PublicKeyToken=b03f5f11d50a3a" kompiliert wurde. Beachten Sie dass Ersetzungsaktualisierungen von Satellitenassemblydateien die genaue Bestimmung der Version einer Satellitenassembly für die Anwendung erschwert, da die Versionsnummer nicht erhöht werden kann.

Weitere Informationen über das Assemblyversioning finden Sie unter Assemblyversionen und So sucht Common Language Runtime nach Assemblys.

Siehe auch

Konzepte

Ressourcen in Anwendungen

Verpacken und Bereitstellen von Ressourcen

So sucht Common Language Runtime nach Assemblys

Abrufen von Ressourcen in RESOURCES-Dateien

Referenz

ResourceManager