Partager via


Ressources dans les applications .NET

Presque toutes les applications de qualité de production doivent utiliser des ressources. Une ressource est toutes les données non exécutables qui sont déployées logiquement avec une application. Une ressource peut être affichée dans une application sous forme de messages d’erreur ou dans le cadre de l’interface utilisateur. Les ressources peuvent contenir des données dans un certain nombre de formulaires, notamment des chaînes, des images et des objets persistants. (Pour écrire des objets persistants dans un fichier de ressources, les objets doivent être sérialisables.) Le stockage de vos données dans un fichier de ressources vous permet de modifier les données sans recompiler votre application entière. Il vous permet également de stocker des données dans un emplacement unique et d’éliminer la nécessité de s’appuyer sur des données codées en dur stockées dans plusieurs emplacements.

.NET offre une prise en charge complète de la création et de la localisation des ressources. En outre, .NET prend en charge un modèle simple pour l’empaquetage et le déploiement de ressources localisées.

Créer et localiser des ressources

Dans une application non localisée, vous pouvez utiliser des fichiers de ressources comme référentiel pour les données d’application, en particulier pour les chaînes susceptibles d’être codées en dur dans plusieurs emplacements dans le code source. Le plus souvent, vous créez des ressources en tant que fichiers texte (.txt) ou XML (.resx) et utilisez Resgen.exe (Générateur de fichiers de ressources) pour les compiler dans des fichiers .resources binaires. Ces fichiers peuvent ensuite être incorporés dans le fichier exécutable de l’application par un compilateur de langage. Pour plus d’informations sur la création de ressources, consultez Créer des fichiers de ressources.

Vous pouvez également localiser les ressources de votre application pour des cultures spécifiques. Cela vous permet de créer des versions localisées (traduites) de vos applications. Lorsque vous développez une application qui utilise des ressources localisées, vous désignez une culture qui sert de culture neutre ou de secours dont les ressources sont utilisées si aucune ressource appropriée n’est disponible. En règle générale, les ressources de la culture neutre sont stockées dans l’exécutable de l’application. Les ressources restantes pour les cultures localisées individuelles sont stockées dans des assemblys satellites autonomes. Pour plus d’informations, consultez Créer des assemblages satellites.

Empaqueter et déployer des ressources

Vous déployez des ressources localisées d'application dans des assemblages satellites. Un assembly satellite contient les ressources d’une seule culture ; il ne contient aucun code d’application. Dans le modèle de déploiement d’assembly satellite, vous créez une application avec un assembly par défaut (qui est généralement l’assembly principal) et un assembly satellite pour chaque culture prise en charge par l’application. Étant donné que les assemblys satellites ne font pas partie de l’assembly principal, vous pouvez facilement remplacer ou mettre à jour des ressources correspondant à une culture spécifique sans remplacer l’assembly principal de l’application.

Déterminez soigneusement les ressources qui composent l’assembly de ressources par défaut de votre application. Étant donné qu’il fait partie de l’assembly principal, toutes les modifications apportées à celui-ci vous obligeront à remplacer l’assembly principal. Si vous ne fournissez pas de ressource par défaut, une exception sera levée lorsque le processus de substitution des ressources tente de la trouver. Dans une application bien conçue, l'utilisation des ressources ne devrait jamais entraîner d'exception.

Pour plus d’informations, consultez l’article Empaquetage et déploiement de ressources .

Récupérer des ressources

Au moment de l’exécution, une application charge les ressources localisées appropriées par thread, en fonction de la culture spécifiée par la CultureInfo.CurrentUICulture propriété. Cette valeur de propriété est dérivée comme suit :

  • En affectant directement un CultureInfo objet qui représente la culture localisée à la Thread.CurrentUICulture propriété.

  • Si une culture n’est pas attribuée explicitement, en récupérant la culture d’interface utilisateur de thread par défaut à partir de la CultureInfo.DefaultThreadCurrentUICulture propriété.

  • Si une culture d’interface utilisateur par défaut du thread n’est pas explicitement assignée, en extrayant la culture de l’utilisateur actuel sur l’ordinateur local. Les implémentations .NET s’exécutant sur Windows effectuent cette opération en appelant la fonction Windows GetUserDefaultUILanguage .

Pour plus d'informations sur la façon dont la culture actuelle de l'interface utilisateur est définie, consultez les pages de référence CultureInfo et CultureInfo.CurrentUICulture.

Vous pouvez ensuite récupérer des ressources pour la culture actuelle de l’interface utilisateur ou pour une culture spécifique à l’aide de la System.Resources.ResourceManager classe. Bien que la ResourceManager classe soit la plus couramment utilisée pour récupérer des ressources, l’espace System.Resources de noms contient des types supplémentaires que vous pouvez utiliser pour récupérer des ressources. Voici quelques-uns des éléments suivants :

  • Classe ResourceReader , qui vous permet d’énumérer les ressources incorporées dans un assembly ou stockées dans un fichier .resources binaire autonome. Il est utile lorsque vous ne connaissez pas les noms précis des ressources disponibles au moment de l’exécution.

  • Classe ResXResourceReader , qui vous permet de récupérer des ressources à partir d’un fichier XML (.resx).

  • Classe ResourceSet , qui vous permet de récupérer les ressources d’une culture spécifique sans observer les règles de secours. Les ressources peuvent être stockées dans un assembly ou dans un fichier .resources binaire autonome. Vous pouvez également développer une implémentation qui vous permet d’utiliser IResourceReader la ResourceSet classe pour récupérer des ressources à partir d’une autre source.

  • La ResXResourceSet classe, qui vous permet de récupérer tous les éléments d’un fichier de ressources XML en mémoire.

Voir aussi