Partager via


Récupération de ressources d'assemblys satellites

Il est conseillé d'empaqueter les ressources pour l'assembly par défaut ou neutre avec l'assembly principal et de créer un assembly satellite séparé pour chaque langue que votre application prend en charge. La classe ResourceManager fournit un accès aux ressources spécifiques à une culture au moment de l'exécution et contrôle la façon dont l'application récupère les ressources à l'aide du processus de secours pour les ressources. Pour plus d'informations, consultez la sous-rubrique « Processus de secours pour les ressources » de la rubrique Empaquetage et déploiement de ressources. Il est souhaitable d'accéder aux ressources via l'un des constructeurs pour la classe ResourceManager. Cela nécessite que les ressources soient compilées dans les assemblys satellites ou qu'elles fassent partie de l'assembly principal de l'application.

ResourceManager détermine les ressources à récupérer en fonction de la propriété CultureInfo.CurrentUICulture du thread en cours. Par exemple, si une application est compilée avec les ressources de langue anglaise par défaut et deux assemblys satellites contenant des ressources pour les ressources de langue française et allemande, et que la propriété CurrentUICulture a la valeur "de", ResourceManager récupère les ressources allemandes. Pour plus d'informations sur la façon de définir la propriété CurrentUICulture, consultez Utilisation de la propriété CurrentUICulture.

L'exemple suivant montre comment utiliser la méthode ResourceManager.GetString pour récupérer et afficher une ressource de type chaîne.

…
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"));
…

Ce code montre comment récupérer et afficher string1 à partir du fichier MyStrings. La chaîne qui est réellement chargée dépend de la propriété CurrentUICulture du thread en cours.

L'exemple suivant montre comment utiliser la méthode ResourceManager.GetObject pour récupérer et afficher une ressource binaire (telle qu'une image graphique).

…
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");
…

Ce code montre comment charger l'objet nommé MyObject à partir du fichier de ressources, MyImages. Il montre comment effectuer un cast de MyObject sur un type Image et l'assigner à la propriété image de PictureBox. L'objet qui est réellement chargé dépend de la propriété CurrentUICulture du thread en cours.

La classe ResourceSet stocke toutes les ressources localisées pour une culture. Un ResourceSet n'utilise pas le processus de secours pour les ressources. C'est pourquoi, ResourceSet n'est pas utile dans les applications localisées.

Prise en charge du versioning pour les assemblys satellites

Par défaut, lorsque ResourceManager récupère les ressources demandées, il recherche les assemblys satellites dont les numéros de version correspondent au numéro de version de l'assembly principal. Après avoir déployé une application, il est possible de mettre à jour l'assembly principal ou des assemblys satellites de ressources spécifiques. Le .NET Framework fournit la prise en charge du versioning de l'assembly principal et des assemblys satellites.

La SatelliteContractVersionAttribute fournit une prise en charge du versioning pour un assembly principal. La spécification de SatelliteContractVersionAttribute dans l'assembly principal d'une application vous permet de mettre à jour et de redéployer cet assembly sans mettre à jour ses assemblys satellites. Après avoir mis à jour l'assembly principal, incrémentez le numéro de version de l'assembly principal, mais ne modifiez pas le numéro de version de contrat satellite. Lorsque ResourceManager récupère les ressources demandées, il charge la version de l'assembly satellite spécifiée par cet attribut.

Les assemblys de stratégie d'éditeur fournissent une prise en charge du versioning des assemblys satellites. Vous pouvez mettre à jour et redéployer un assembly satellite sans mettre à jour l'assembly principal. Après avoir mis à jour un assembly satellite, incrémentez son numéro de version et livrez-le avec un assembly de stratégie d'éditeur. Dans l'assembly de stratégie d'éditeur, spécifiez que votre nouvel assembly satellite est à compatibilité amont avec sa version précédente. Bien que ResourceManager utilise le numéro de version de contrat existant de l'assembly principal pour récupérer les ressources demandées, la version mise à jour correcte de l'assembly sera récupérée, car le chargeur de l'assembly liera la version d'assembly satellite spécifiée dans l'assembly de stratégie d'éditeur. Pour plus d'informations sur les assemblys de stratégie d'éditeur, consultez Création d'un fichier de stratégie d'éditeur.

Pour activer la prise en charge du versioning d'assembly complet, il est recommandé de déployer des assemblys avec nom fort dans le Global Assembly Cache et de déployer des assemblys sans nom fort dans le répertoire de l'application. Si vous souhaitez déployer des assemblys avec nom fort dans le répertoire de l'application, vous ne serez pas en mesure d'incrémenter le numéro de version d'un assembly satellite lors de la mise à jour de l'assembly. Vous devez donc effectuer une mise à jour sur place dans laquelle vous remplacez le code existant par le code mis à jour et conservez le même numéro de version. Par exemple, si vous souhaitez mettre à jour la version 1.0.0.0 d'un assembly satellite avec le nom d'assembly complètement spécifié "myApp.resources, Version=1.0.0.0, Culture=de, PublicKeyToken=b03f5f11d50a3a", remplacez cet assembly par le fichier myApp.resources.dll mis à jour, compilé avec le même nom d'assembly complètement spécifié "myApp.resources, Version=1.0.0.0, Culture=de, PublicKeyToken=b03f5f11d50a3a". Étant donné que le numéro de version ne peut pas être incrémenté, l'utilisation de mises à jour sur place pour les fichiers d'assembly satellite permet difficilement à une application de déterminer précisément la version d'un assembly satellite.

Pour plus d'informations sur le versioning des assemblys, consultez Versioning des assemblys et Méthode de localisation des assemblys par le runtime.

Voir aussi

Référence

ResourceManager

Concepts

Ressources dans les applications

Empaquetage et déploiement de ressources

Méthode de localisation des assemblys par le runtime

Récupération de ressources de fichiers .Resources