Загрузите ResourceDictionary из сборки
-
22-08-2019 - |
Вопрос
У меня есть сборка где-то в файловой системе, например."C: emp est.dll".В этой сборке есть ResourceDictionary, например."abc.xaml".
Как я могу получить этот ResourceDictionary?Может быть, есть способ использовать отражения?Я пока не нашел решения.
Заранее спасибо!
Редактировать:Просто хотел добавить, что я хочу получить доступ к ресурсам в словаре, например.стиль.
Решение 2
Редактировать: Я нашел еще лучшее решение, которое работает с ResourceDictionaries:
Assembly.LoadFrom(@"C:\temp\test.dll");
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri("/test;component/myresource.xaml");
Ну, я не мог заставить его работать с ресурсами, поэтому я использую старые старые файлы ресурсов;) Для тех, кто заинтересован, вот как я это сделал:
Assembly a = Assembly.LoadFile(@"C:\temp\test.dll");
ResourceManager rm = new ResourceManager("NameOfResource", a);
object o = rm.GetObject("xyz");
Вы можете получить «NameOfResource» с помощью Reflector, как предложил Ян.
Другие советы
На самом деле вам нужно написать Uri следующим образом:
Assembly.LoadFrom(@"C:\temp\test.dll");
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri(@"pack://application:,,,/test;component/myresource.xaml");
Возьмите копию Отражатель (Луц передал это сейчас).Используйте это, чтобы просмотреть сборку, пространство имен и т. д. ресурсов в ней.
Затем прочитайте во встроенном ресурсе что-то вроде этого;
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();
}
}