web-dev-qa-db-fra.com

Impossible de trouver des ressources appropriées pour la culture spécifiée ou la culture neutre

J'ai créé une assemblée et je l'ai renommée plus tard.

Ensuite, j'ai commencé à avoir des erreurs d'exécution lors de l'appel:

toolsMenuName = resourceManager.GetString(resourceName);

La variable resourceName est "enTools" au moment de l'exécution.

Impossible de trouver des ressources approprié pour la culture spécifiée ou la culture neutre. Assure-toi "Jfc.TFSAddIn.CommandBar.resources" était correctement intégré ou lié à Assemblage "Jfc.TFSAddIn" à la compilation temps, ou que tout le satellite les ensembles requis sont chargeables et entièrement signé.

Le code:

string resourceName;
ResourceManager resourceManager = new ResourceManager("Jfc.TFSAddIn.CommandBar", Assembly.GetExecutingAssembly());

CultureInfo cultureInfo = new CultureInfo(_applicationObject.LocaleID);

if(cultureInfo.TwoLetterISOLanguageName == "zh")
{
     CultureInfo parentCultureInfo = cultureInfo.Parent;
     resourceName = String.Concat(parentCultureInfo.Name, "Tools");
}
else
{
     resourceName = String.Concat(cultureInfo.TwoLetterISOLanguageName, "Tools");
}

toolsMenuName = resourceManager.GetString(resourceName); // EXCEPTION IS HERE

Je peux voir le fichier CommandBar.resx inclus dans le projet, je peux l'ouvrir et voir la chaîne "enTools". Il semble que les ressources ne soient pas incluses dans Assembly ou que les ressources le soient, mais .NET ne peut pas résoudre le nom.

15
Captain Comic

Je pense que la solution la plus simple serait de créer un fichier de ressources séparé pour chaque langue.

En ce qui concerne ce cas, vérifiez si l'espace de nom par défaut de l'ensemble contenant des ressources est défini sur le même texte (Projet-> Propriétés-> Espace de nom par défaut; dans VS)

Vérifiez également si le fichier resx a une propriété BuildAction définie sur "Ressource incorporée"

29
dzendras

Cela ressemble à un problème que nous avons eu. L'espace de noms était incorrect dans le concepteur du fichier de ressources. Je l'ai corrigé en réexécutant manuellement l'outil personnalisé sur le fichier resx. 

Cliquez avec le bouton droit sur votre.resx, puis cliquez sur Exécuter l'outil personnalisé.

13
firefox1986

Je suis sûr que vous avez déjà la réponse, mais juste au cas où:

  1. Vous pouvez afficher votre ManifestResourceName en appelant 

    System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames() 
    

    Vérifiez que le nom du manifeste et votre nom dans l'appel de GetString () sont identiques.

  2. Assurez-vous également que votre espace de noms est correct dans le fichier designer.resx:

    namespace Jfc.TFSAddIn {
    ...
    global::System.Resources.ResourceManager temp = 
                 new global::System.Resources.ResourceManager(
                 "Jfc.TFSAddIn.CommandBar", typeof(CommandBar).Assembly);
    ... 
    }
    
  3. Ouvrir les propriétés du fichier resx: "Build Action" doit être "Embedded Resource"

10
Olga Golubeva

Pour moi, la source du problème était de nommer les fichiers rex en commençant par un numéro:

20160216_tranlation.resx

J'ai dû ajouter un trait de soulignement _ avant le nom du fichier resx lors de l'appel de GetGlobalResourceObject:

public static string getResource(string key)
{
    return HttpContext.GetGlobalResourceObject("_20160216_tranlation", key).ToString();
}
1
krlzlx

J'ai ajouté une classe temporaire dans mon Form.cs en testant le débogage || qui a provoqué la levée de cette exception. Le fichier Form.resx (Nom || ID de ressource) a été modifié en nom de classe temporaire au lieu du nom de classe de formulaire. Cela a causé le problème pour moi. J'ai (corrigé || allégé) ceci en créant un fichier séparé pour ma classe temporaire dans le projet.

0
user984899

J'ai rencontré ce problème dans Xamarin.Forms, lorsque j'ai essayé de renommer le projet, les ressources ne pouvaient plus être chargées avec le même texte d'erreur indiqué.

Pour résoudre le problème, je devais modifier le fichier .csproj à l'aide d'un éditeur de texte, puis changer le nom logique de la ressource incorporée.

<EmbeddedResource Include="Localization\TextResources.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>TextResources.Designer.cs</LastGenOutput>
      <LogicalName>YourNewNamespaceName.TextResources.resources</LogicalName>
      <SubType>Designer</SubType>
</EmbeddedResource>

Surveillez également la classe générée automatiquement lorsque vous la reconstruisez, l’espace de nom indiqué dans celle-ci peut changer.

J'espère que cela aidera quelqu'un qui s'est retrouvé dans la même situation.

0
Wail

Une solution consiste à changer la propriété du fichier resx du contenu en contenu incorporé et à la construire

0
Sai Saran

Vous avez cette erreur lorsque j'ai ajouté une classe AU-DESSUS de la classe de formulaire partiel dans mon application Windows Forms.

Il est parti lorsque j'ai déplacé la classe AU-DESSOUS de la classe de formulaire partiel. 

0
Lynn Demarest

J'ai corrigé l'espace de noms dans le fichier de concepteur (Resources.Designer.cs) dans la propriété statique de ResourceManager et cela a fonctionné pour moi.

Voir le code ci-dessous:

[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
    internal static global::System.Resources.ResourceManager ResourceManager {
        get {
            if (object.ReferenceEquals(resourceMan, null)) {
                global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("XYZAssembly.Properties.Resources", typeof(Resources).Assembly);
                resourceMan = temp;
            }
            return resourceMan;
        }
    }
0
Vijay Kankhare