C# - kann Nicht immer ein string von der ResourceManager - (von Sat-Montage)

Entwickle ich eine lokalisierbare Anwendung. In meinem "lokalen" Ressourcen-Datei, ich habe die Sprache standardmäßig verwendet wird (Englisch) und, wenn möglich, lade ich die Benutzereinstellungen und Kultur und laden von Zeichenfolgen übersetzt, ist die Sprache.

Also, was ich getan habe :

private static CultureInfo _culture = CultureInfo.CurrentUICulture;
private static ResourceManager _manager;

private static void ToNeutralCulture()
{
    while (!_culture.IsNeutralCulture)
    {
        _culture = _culture.Parent;
    }
}

private static void LoadCulture()
{
    ResourceManager manager = Properties.Resources.ResourceManager;

    try
    {
        ToNeutralCulture();

        string assembly = Assembly.GetCallingAssembly().GetName().CodeBase;
        string assemblyDir = Path.GetDirectoryName(assembly);
        string assemblyName = Path.GetFileNameWithoutExtension(assembly);
        string resourceFileName = string.Format(CultureInfo.InvariantCulture,
            @"{0}\{1}_{2}.dll",
            assemblyDir,
            assemblyName,
            _culture.Name.ToUpper());

        FileInfo resourceFile = new FileInfo(resourceFileName);
        if (resourceFile.Exists)
        {
            Assembly resourceAssembly = Assembly.LoadFrom(resourceFile.FullName);
            string[] manifests = resourceAssembly.GetManifestResourceNames();

            if (manifests.Length == 1)
            {
                manager = new ResourceManager(manifests[0], resourceAssembly);
            }

            using (ResourceReader reader = new ResourceReader(resourceAssembly.GetManifestResourceStream(manifests[0])))
            {
                IDictionaryEnumerator dict = reader.GetEnumerator();
                while (dict.MoveNext())
                {
                    string key = dict.Key as string;
                    object val = dict.Value;

                    //string mVal = manager.GetString(key);
                }
            }
        }
    }
    catch (Exception ex)
    {
        Trace.WriteLine(ex.Message);

        Trace.WriteLine(string.Format(CultureInfo.InvariantCulture,
            "Fail to loading culture {0}", 
            (_culture == null) ? "--" : _culture.EnglishName));
    }

    _manager = manager;
}

Versammlung ordnungsgemäß geladen und den Zähler zeigt mir alle Ressourcen in die Ressource-Datei, gut, funktioniert gut, außer :

string mVal = manager.GetString(key);

Wenn ich diese Zeile auskommentiert, ich habe eine System.Resources.MissingManifestResourceException, kann mir jemand sagen warum?

Dank !


[BEARBEITEN]

Projekt "MyApp"

namespace MyApp
{
    Assembly resourceAssembly = Assembly.LoadFrom(resourceFileName);
    string[] manifests = resourceAssembly.GetManifestResourceNames();

    if (manifests.Length == 1)
    {
        manager = new ResourceManager(manifests[0], resourceAssembly);
    }

    //Throws the exception
    manager.GetString("PleaseCallIT", null);

    //Works
    using (ResourceReader reader = new ResourceReader(resourceAssembly.GetManifestResourceStream(manifests[0])))
    {
        IDictionaryEnumerator dict = reader.GetEnumerator();
        while (dict.MoveNext())
        {
            string key = dict.key as string; //PleaseCallIT
            object val = dict.value; //Please call IT.
        }
    }
}

Projekt "MyApp_FR" (Ressourcen.Designer.cs automatisch generierte Datei)

namespace MyApp.Properties {
    //...
    internal static string PleaseCallIT {
        get {
            return ResourceManager.GetString("PleaseCallIT", resourceCulture);
        }
    }
}

Verstehe ich nicht...

Sind Sie sicher, dass die Ressource vorhanden ist, in die Ressource-assembly?
Was ist die Fehlermeldung in Verbindung mit der Ausnahme? Die folgenden Fragen und Antworten können Ihnen helfen, aus: stackoverflow.com/questions/1327692/...
Ja, ich bin sicher, wenn ich die Schleife mit den Enumerator, habe ich alle strings, die ich in meinem Sat-Ressource-Datei.
Enttäuschung" : Schon geschaut, funktioniert nicht.
Dang, wie etwa diese (bei denen es letztlich darauf an, einen namespace Problem, ich sammle): jameswho.blogspot.com/2004/06/...

InformationsquelleAutor Arnaud F. | 2011-03-09

Schreibe einen Kommentar