Отражение 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,

Другие вопросы по тегам