Вопрос

У меня есть сборка где-то в файловой системе, например."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();
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top