it-swarm.com.de

Konnte keine Ressourcen finden, die für die angegebene Kultur oder die neutrale Kultur geeignet sind

Ich habe eine Assembly erstellt und später umbenannt.

Dann bekam ich Laufzeitfehler beim Aufruf von:

toolsMenuName = resourceManager.GetString(resourceName);

Die Variable resourceName ist zur Laufzeit "enTools" .

Es konnten keine Ressourcen gefunden werden passend für die angegebene Kultur oder die neutrale Kultur. Stelle sicher "Jfc.TFSAddIn.CommandBar.resources" wurde korrekt eingebettet oder in .__ verlinkt. Assembly "Jfc.TFSAddIn" beim Kompilieren Zeit, oder dass alle Satelliten erforderliche Baugruppen sind ladbar und vollständig unterschrieben.

Der 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

Ich kann die im Projekt enthaltene Datei CommandBar.resx sehen, ich kann sie öffnen und dort die Zeichenfolge "enTools" sehen. Es scheint, dass entweder keine Ressourcen in Assembly enthalten sind oder Ressourcen enthalten sind, .NET jedoch den Namen nicht auflösen kann.

15
Captain Comic

Ich denke, eine einfachere Lösung wäre die Erstellung einer separaten Ressourcendatei für jede Sprache.

In diesem Fall überprüfen Sie, ob für die Assembly, die Ressourcen enthält, der Standard-Namespace auf denselben Text festgelegt ist (Projekt-> Eigenschaften-> Standard-Namespace; in VS)

Überprüfen Sie auch, ob die Eigenschaft "BuildAction" für "resx" auf "Embedded resource" gesetzt ist.

29
dzendras

Klingt ähnlich wie bei einem Problem, das wir hatten. Der Namespace war im Designer der Ressourcendatei falsch. Ich habe das Problem behoben, indem das benutzerdefinierte Tool manuell in der resx-Datei ausgeführt wurde. 

Klicken Sie mit der rechten Maustaste auf Ihre.resx, und klicken Sie auf Benutzerdefiniertes Tool ausführen.

13
firefox1986

Ich bin sicher, Sie haben bereits die Antwort, aber nur für den Fall:

  1. Sie können Ihren ManifestResourceName durch Aufrufen anzeigen 

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

    Überprüfen Sie, ob der Manifestname und Ihr Name beim Aufruf von GetString () identisch sind.

  2. Stellen Sie außerdem sicher, dass Sie über den richtigen Namespace in der Datei designer.resx verfügen:

    namespace Jfc.TFSAddIn {
    ...
    global::System.Resources.ResourceManager temp = 
                 new global::System.Resources.ResourceManager(
                 "Jfc.TFSAddIn.CommandBar", typeof(CommandBar).Assembly);
    ... 
    }
    
  3. Öffnen Sie die Eigenschaften der resx-Datei: "Build Action" sollte "Embedded Resource" sein.

10
Olga Golubeva

Für mich bestand die Ursache des Problems darin, die rex-Dateien mit einer Nummer zu benennen:

20160216_transanlation.resx

Beim Aufruf von GetGlobalResourceObject musste ich vor dem Namen der resx-Datei einen Unterstrich _ hinzufügen:

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

Ich habe eine temporäre Klasse in meiner Form.cs während des Tests (| | | Debugging) hinzugefügt, durch die diese Ausnahme ausgelöst wurde. Die Datei Form.resx (Name || Ressourcen-ID) wurde in den temporären Klassennamen anstelle des Formularklassennamens geändert. Dies verursachte das Problem für mich. Ich habe dies korrigiert (korrigiert ||), indem ich eine separate Datei für meine temporäre Klasse im Projekt erstellt habe.

0
user984899

Dieses Problem ist in Xamarin.Forms aufgetreten. Als ich versuchte, das Projekt umzubenennen, konnten die Ressourcen nicht mehr mit dem gleichen Fehlertext geladen werden.

Um das Problem zu beheben, musste ich die .csproj mit einem Texteditor ändern und den logischen Namen der eingebetteten Ressource ändern.

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

Achten Sie auch auf die automatisch generierte Klasse, wenn Sie sie neu erstellen. Der dort angegebene Namespace kann sich ändern.

Ich hoffe, es hilft jemandem, der in dieselbe Situation geraten ist.

0
Wail

Eine Lösung besteht darin, die Eigenschaft der resx-Datei vom Inhalt in Embedded Resource und Build it umzuwandeln

0
Sai Saran

Dieser Fehler wurde beim Hinzufügen einer Klasse ÜBER der Teilformularklasse in meiner Windows Forms-App angezeigt.

Es verschwand, als ich die Klasse unter der Teilformklasse bewegte. 

0
Lynn Demarest

Ich habe den Namespace in der Designer-Datei (Resources.Designer.cs) in der statischen Eigenschaft ResourceManager korrigiert und für mich funktioniert.

Siehe den Code unten:

[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