Accéder aux fichiers de ressources resx d’un autre projet

J’utilise asp.net 3.5, ma solution comporte actuellement 2 projets, un projet de classe API et un projet de site Web. Dans le projet de classe, j’ai un fichier de ressources appelé checkin.resx. Pour pouvoir accéder aux fichiers de ressources de mon projet de site Web, je devais définir le paramètre “Access Modifier” sur public, ce qui me permettait d’utiliser un nom fortement typé pour accéder aux ressources, par exemple: CkiApi.Checkin.Resources.Checkin.OCKI_HeaderText , où Checkin est le fichier .resx et OCKI_HeaderText est la clé de la ressource.

Le problème auquel je suis confronté est que je ne parviens pas à accéder aux ressources à partir d’un code aspx frontal, par exemple, en définissant une propriété de texte d’une étiquette ou un message d’erreur de validation. J’ai essayé la syntaxe suivante en vain:

 <asp:Label AssociatedControlID="IdentMethods" EnableViewState="false" ID="lblIdentMethod" runat="server" Text=""> 

l’erreur que je reçois est

L’object de ressource avec la clé ‘OCKI_IdentificationMethod’ est introuvable.

mais quelle que soit la définition du nom de la classe, j’obtiens la même erreur. Je pense que c’est parce que c’est essayer de regarder dans le projet de site Web, mais je ne vois pas comment lui dire de regarder l’API! Quelqu’un peut-il aider?

Je peux définir des balises non côté serveur en utilisant les éléments suivants:

 

Les expressions de ressources ( <%$ Resources: ClassKey, ResourceKey %> ) utilisent la classe ResourceExpressionBuilder derrière la scène. Cette classe peut uniquement rechercher des ressources globales et locales (dans les dossiers App_GlobalResources et App_LocalResources du site Web).

Au lieu de cela, vous pouvez utiliser la classe CodeExpressionBuilder pour accéder aux ressources de différents projets. Voici comment l’utiliser.

Ajoutez la classe CodeExpressionBuilder au dossier App_Code:

 using System.CodeDom; using System.Web.Compilation; using System.Web.UI; [ExpressionPrefix("Code")] public class CodeExpressionBuilder : ExpressionBuilder { public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) { return new CodeSnippetExpression(entry.Expression); } } 

Ajoutez les éléments suivants à la section system.web / compilation dans web.config:

  ...     

Enfin, vous pouvez appeler une classe fortement typée générée pour votre fichier .resx:

  

Vous ne savez pas si cela résoudra votre problème, mais avez-vous examiné la méthode HttpContext.GetGlobalResourceObject ?

Je l’ai utilisé pour accéder à des ressources dans le projet Web, à partir de bibliothèques de classes dans un projet-cadre – alors vous aurez peut-être de la chance de les utiliser dans l’autre sens.