У меня есть .dll с большим количеством ResourceDictionaries.
Действие сборки всех этих ResourceDictionaries установлено на «Страница».
Внутри Dll я хочу найти все эти ResourceDictionaries и перебрать их.
Если я устанавливаю действие сборки на «EmbeddedResource», я могу использовать Reflection:
var embeddedResources = Assembly.GetExecutingAssembly().GetManifestResourceNames().ToList();
Но GetManifestResourceNames () не работает для ресурсов с действием сборки «Страница».
Как найти или перебрать все ресурсы, у которых есть "страница" действия сборки?
Решением не обязательно должно быть отражение. Любой другой способ приветствуется.
Спасибо!
Решение:
Дамы и господа! Я должен объявить, что человеком недели и победителем этой награды стал мистер Джон Ву. Джон Ву дал правильный намек, и путем поиска я нашел это решение:
Перечисление ресурсов сборки .NET во время выполнения
Слегка измененный рабочий код выглядит так:
public static string[] GetResourceNames()
{
var asm = Assembly.GetExecutingAssembly();
string resName = asm.GetName().Name + ".g.resources";
using (var stream = asm.GetManifestResourceStream(resName))
using (var reader = new System.Resources.ResourceReader(stream))
{
return reader.Cast<DictionaryEntry>().Select(entry => (string)entry.Key).ToArray();
}
}
Если вы вызовете этот метод, вы получите все строки ресурсов с расширением «.baml» в конце и сможете перебирать их.
Спасибо, Джон Ву, за правильный намек.
<WpfApplicationName>.g.resources
ресурс .NET, содержащий по одному потоку для каждого словаря. Эти словари имеют формат BAML (en.wikipedia.org/wiki/), поэтому Я не уверен, что это полезно. Что бы вы хотели сделать после того, как перечислили эти потоки BAML? - person Simon Mourier   schedule 23.06.2017