Подтвердить что ты не робот

Загрузите ResourceDictionary из сборки

У меня есть сборка где-то в файловой системе, например. "C:\Temp\test.dll". В этой сборке есть ResourceDictionary, например. "Abc.xaml".

Как я могу получить этот ResourceDictionary? Может быть, есть способ использовать Размышления? Пока я не нашел решения.

Спасибо заранее!

Изменить: просто хотел добавить, что я хочу получить доступ к ресурсам в словаре, например. Стиль.

4b9b3361

Ответ 1

Изменить: Я нашел еще лучшее решение, которое работает с ResourceDictionaries:

Assembly.LoadFrom(@"C:\temp\test.dll");
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri("/test;component/myresource.xaml");

Ну, я не мог заставить его работать с ResourceDictionaries, так что вместо этого я использую старые старые файлы ресурсов;) Для всех, кого это интересует, вот как я это сделал:

Assembly a = Assembly.LoadFile(@"C:\temp\test.dll");
ResourceManager rm = new ResourceManager("NameOfResource", a);
object o = rm.GetObject("xyz");

Вы можете получить "NameOfResource" с Reflector, как предположил Ян.

Ответ 2

Вам действительно нужно написать Uri следующим образом:

Assembly.LoadFrom(@"C:\temp\test.dll");
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri(@"pack://application:,,,/test;component/myresource.xaml");

Ответ 3

Возьмите копию Reflector (Лутц передал это сейчас). Используйте это, чтобы посмотреть на сборку и пространство имен и т.д. Ресурсов в нем.

Затем прочитайте во встроенном ресурсе что-то вроде этого:

Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
using (System.IO.Stream s = asm.GetManifestResourceStream(<yourname>)
{
    using (System.IO.StreamReader reader = new System.IO.StreamReader(s))
    {
        string xml = reader.ReadToEnd();
    }
}