2008-10-01 19 views
17

¿Hay alguna forma de determinar si un ResourceManager contiene un recurso con nombre? Actualmente estoy atrapando la excepción MissingManifestResourceException, pero odio tener que usar excepciones para situaciones no excepcionales. Debe haber alguna manera de enumerar los pares de nombre y valor de un ResourceManager a través de la reflexión, o algo así?Determine si existe un recurso en ResourceManager

EDIT: Un poco más de detalle. Los recursos no se encuentran en la ejecución del ensamblado, sin embargo, ResourceManager está funcionando bien. Si intento _resourceMan.GetResourceSet(_defaultCuture, false, true) me sale nulo, mientras que si intento _resourceMan.GetString("StringExists") me devuelven una cadena.

Respuesta

22

Puede usar ResourceSet para hacerlo, solo si carga todos los datos en la memoria si lo enumera. Aquí y'go:

// 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); 
+0

Cuando trato de obtener el ResourceSet del ResourceManager me devuelven el nulo. –

+0

Ok, lo tengo funcionando, pero tengo que intentar cargar un solo recurso antes de poder llamar a GetResourceSet. Wierd. –

3

Creo que puede usar algo como Assembly.GetManifestResourceNames para enumerar la lista de recursos disponibles en el manifiesto de la Asamblea. No es bonito y no resuelve todos los casos de esquina, pero funciona si es necesario.

+0

Eso devuelve una matriz de cero cadenas. –

+0

¿Los recursos están en un recurso satelital? – user7116

+2

Le está dando nombres de ResourceManager, no nombres de recursos en esos ResourceManagers;). –

Cuestiones relacionadas