Determine si un recurso existe en ResourceManager
Pregunta
¿Hay alguna forma de determinar si un ResourceManager contiene un recurso con nombre? Actualmente estoy detectando la excepción MissingManifestResourceException pero odio tener que usar Excepciones para situaciones no excepcionales. Debe haber alguna forma de enumerar los pares de valores de nombre de un ResourceManager a través de la reflexión, o algo así.
EDIT : Un poco más de detalle. Los recursos no están en la ejecución del ensamblaje, sin embargo, el Administrador de recursos está funcionando bien. Si intento _resourceMan.GetResourceSet (_defaultCuture, false, true)
, obtengo un valor nulo, mientras que si intento _resourceMan.GetString (" StringExists ")
obtengo una cadena de vuelta.
Solución
Puede usar el Conjunto de recursos para hacer eso, solo que carga todos los datos en la memoria si lo enumera. Aquí tienes:
// 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);
Otros consejos
Creo que puedes usar algo como Assembly.GetManifestResourceNames para enumerar la lista de recursos disponibles en el manifiesto del ensamblado. No es bonito y no resuelve todos los casos de esquina, pero funciona si es necesario.