Partager des ressources (resx) entre 2 applications - resx et visibilité public/internal (PublicResXFileCodeGenerator Vs ResXFileCodeGenerator)
J’ai récemment eu besoin de partager une ressource (resx) entre 2 sites web. J’ai alors créé une ressource dans une assembly partagée.
Malheureusement, je n’ai pas pu accéder à cette ressource depuis mes sites web. En effet, par défaut, les ressources génèrent du code avec une visibilité internal.
Bien sur, j’aurais pu utiliser la classe ResourceManager et accéder à mes ressource par ce biais, cette solution est cependant moins pratique que d’avoir un accès direct.
Par défaut les resx utilisent l’outil personnalisé nommé “ResXFileCodeGenerator” afin de générer le code. Il existe un autre outil permettant de générer des ressources avec une visibilité public : PublicResXFileCodeGenerator.

Ainsi vous pouvez accéder à vos ressources directement depuis les autres assemblies.
ASP.net 2.0 nous propose le ResourceExpressionBuilder, cela nous permet d’utiliser le code suivant :
<asp:Literal runat="server" Text="<%$ Resources : Shared, Hello %>" />
La solution proposée plus haut ne permet pas d’utiliser cette expression. En effet le ResourceExpressionBuilder recherche les ressources seulement dans le dossier App_GlobalResources.
Si vous souhaitez avoir le même comportement en utilisant des ressources partagés, il faut son votre propre ExpressionBuilder. J’ai expliqué comment faire un ExpressionBuilder ici : Dynamic Expression personnalisée : ProfileExpressionBuilder avec ASP.net 2.0
Et vous ? Avec vous eu déjà besoin de partager vos ressources entre plusieurs applications ?