Загрузите ResourceDictionary из сборки
У меня есть сборка где-то в файловой системе, например. "C:\Temp\test.dll".
В этой сборке есть ResourceDictionary, например. "Abc.xaml".
Как я могу получить этот ResourceDictionary? Может быть, есть способ использовать Размышления? Пока я не нашел решения.
Спасибо заранее!
Изменить: просто хотел добавить, что я хочу получить доступ к ресурсам в словаре, например. Стиль.
Ответы
Ответ 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();
}
}