Domanda

Esiste un modo per determinare se un ResourceManager contiene una risorsa denominata? Attualmente sto rilevando MissingManifestResourceException ma odio dover usare Eccezioni per situazioni non eccezionali. Ci deve essere un modo per enumerare le coppie valore-valore di un ResourceManager tramite reflection, o qualcosa del genere?

MODIFICA : qualche dettaglio in più. Le risorse non sono nell'esecuzione dell'assembly, tuttavia ResourceManager funziona perfettamente. Se provo _resourceMan.GetResourceSet (_defaultCuture, false, true) ottengo null, mentre se provo _resourceMan.GetString (" StringExists ") ricevo una stringa indietro.

È stato utile?

Soluzione

È possibile utilizzare ResourceSet per farlo, carica solo tutti i dati in memoria se lo si enumera. Ecco qui:

    // At startup.
    ResourceManager mgr = Resources.ResourceManager;
    List<string> keys = new List<string>();

    ResourceSet set = mgr.GetResourceSet(CultureInfo.CurrentCulture, true, true);
    foreach (DictionaryEntry o in set)
    {
        keys.Add((string)o.Key);
    }
    mgr.ReleaseAllResources();

    Console.WriteLine(Resources.A);

Altri suggerimenti

Penso che tu possa usare qualcosa come Assembly.GetManifestResourceNames per enumerare l'elenco delle risorse disponibili nel manifest dell'Assemblea. Non è carino e non risolve tutti i casi angolari, ma funziona se necessario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top