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