Определите, существует ли ресурс в ResourceManager.
Вопрос
Есть ли способ определить, содержит ли ResourceManager именованный ресурс?В настоящее время я перехватываю исключение MissingManifestResourceException, но ненавижу использовать исключения для неисключительных ситуаций.Должен быть какой-то способ перечислить пары «имя-значение» ResourceManager посредством отражения или что-то в этом роде?
РЕДАКТИРОВАТЬ:Немного подробнее.Ресурсы не участвуют в выполнении сборки, однако ResourceManager работает нормально.Если я попробую _resourceMan.GetResourceSet(_defaultCuture, false, true)
Я получаю ноль, тогда как если я попробую _resourceMan.GetString("StringExists")
Я получаю веревку обратно.
Решение
Для этого вы можете использовать ResourceSet, но он загружает все данные в память, если вы их перечислите.Вот, пожалуйста:
// 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);
Другие советы
Я думаю, вы можете использовать что-то вроде Сборка.GetManifestResourceNames для перечисления списка ресурсов, доступных в манифесте Ассамблеи.Это некрасиво и не решает всех сложных случаев, но при необходимости работает.