Teilen über


Ladealgorithmus für Satellitenassemblys

Satellitenassemblys werden verwendet, um lokalisierte Ressourcen für Sprachen und Kulturen zu speichern.

Für Satellitenassemblys wird ein anderer Ladealgorithmus als für allgemeine verwaltete Assemblys verwendet.

Wann werden Satellitenassemblys geladen?

Satellitenassemblys werden beim Laden einer lokalisierten Ressource geladen.

Die grundlegende API zum Laden lokalisierter Ressourcen ist die System.Resources.ResourceManager-Klasse. Letztendlich ruft die ResourceManager-Klasse die GetSatelliteAssembly-Methode für jede CultureInfo.Name auf.

APIs auf höherer Ebene können eine API auf niedrigerer Ebene abstrahieren.

Algorithmus

Der .NET Core-Ressourcenfallbackprozess besteht aus folgenden Schritten:

  1. Bestimmen Sie die active AssemblyLoadContext-Instanz. In allen Fällen handelt es sich bei der active-Instanz um den AssemblyLoadContext der ausführenden Assembly.

  2. Die active-Instanz versucht, eine Satellitenassembly für die angeforderte Kultur in folgender Reihenfolge nach Priorität zu laden:

  3. Wenn eine Satellitenassembly geladen wird:

    • Das AppDomain.AssemblyLoad-Ereignis wird ausgelöst.
    • Die Assembly wird nach der angeforderten Ressource durchsucht. Wenn die Runtime die Ressource in der Assembly findet, verwendet sie diese. Wenn sie die Ressource nicht findet, fährt sie mit der Suche fort.

    Hinweis

    Um eine Ressource in der Satellitenassembly zu finden, sucht die Runtime nach der Ressourcendatei, die vom ResourceManager für den aktuellen CultureInfo.Name angefordert wird. Sie sucht in der Ressourcendatei nach dem angeforderten Ressourcennamen. Wenn keins von beiden gefunden wird, wird die Ressource als nicht gefunden behandelt.

  4. Als Nächstes sucht ResourceManager die übergeordneten Kulturassemblys auf vielen möglichen Ebenen, wobei jedes Mal die Schritte 2 und 3 wiederholt werden.

    Jeder Kultur hat genau ein übergeordnetes Element, das von der CultureInfo.Parent-Eigenschaft definiert wird.

    Die Suche nach übergeordneten Kulturen ist beendet, wenn die Parent-Eigenschaft einer Kultur CultureInfo.InvariantCulture ist.

    Für die InvariantCulture werden die Schritte 2 und 3 nicht wiederholt, sondern stattdessen mit Schritt 5 fortgefahren.

  5. Wenn die Ressource immer noch nicht gefunden wurde, verwendet ResourceManager die Ressource für die Standardkultur (Fallback).

    Für gewöhnlich werden die Ressourcen der Standardkultur in die Hauptassembly der Anwendung integriert. Sie können jedoch UltimateResourceFallbackLocation.Satellite für die NeutralResourcesLanguageAttribute.Location-Eigenschaft angeben. Dieser Wert gibt an, dass der endgültige Fallbackort für Ressourcen eine Satellitenassembly ist und nicht die Hauptassembly.

    Hinweis

    Die Standardkultur wird als endgültiges Fallback verwendet. Daher wird empfohlen, immer einen umfassenden Satz an Ressourcen in die Standardressourcendatei zu integrieren. So werden Ausnahmen verhindert. Über diesen umfassenden Satz stellen Sie einen Fallback für alle Ressourcen bereit und stellen sicher, dass immer mindestens eine Ressource für den Benutzer verfügbar ist, auch wenn diese nicht kulturspezifisch ist.

  6. Zum Schluss: