Отражение WPF C#: переберите все ресурсы с помощью действия сборки "Страница"
У меня есть.dll с большим количеством ResourceDictionaries.
Действие по сборке всех этих ResourceDictionaries установлено на "Страница".
Внутри Dll я хочу найти все эти ResourceDictionaries и перебрать их.
Если я установлю действие сборки на "EmbeddedResource", я смогу использовать Reflection:
var embeddedResources = Assembly.GetExecutingAssembly().GetManifestResourceNames().ToList();
Но GetManifestResourceNames() не работает для ресурсов с действием построения "Страница".
Как найти или перебрать все ресурсы, на которых есть действие "page" сборки?
Решение не должно быть отражением. Любой другой способ очень приветствуется.
Спасибо!
Решение:
Дамы и господа! Я должен объявить, что человек недели и победитель этой награды - мистер Джон Ву. Джон Ву дал правильную подсказку, и с помощью поиска я нашел это решение:
Перечисление ресурсов сборки.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" в конце, и вы можете перебирать их.
Спасибо Джон Ву за правильный намек.
1 ответ
Согласно этому ответу,
Страница (только WPF): используется для компиляции файла xaml в baml. Затем baml внедряется с использованием той же технологии, что и Resource (т.е.
AppName.g.resources
).
Похоже, вам просто нужно искать ресурсы, идентифицированные с YourAppName.g.resources
,