Pregunta

Tengo una asamblea en algún lugar del sistema de archivos, por ejemplo, "C: \ temp \ test.dll". En ese conjunto hay un ResourceDictionary, por ejemplo "Abc.xaml".

¿Cómo puedo conseguir que ResourceDictionary? Tal vez hay una manera de utilizar las reflexiones? No he encontrado una solución hasta el momento.

Gracias de antemano!

Edit: Sólo quería añadir que quiero acceder a los recursos en el diccionario, por ejemplo, un estilo.

¿Fue útil?

Solución 2

Editar He encontrado una solución aún mejor que trabaja con ResourceDictionaries:

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

Bueno, no pude conseguir que funcione con ResourceDictionaries, así que estoy usando bien los archivos de recursos de edad en su lugar;) Para todos los interesados, aquí es cómo lo hice:

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

Usted puede obtener "NameOfResource" con reflector, como se sugiere Ian.

Otros consejos

En realidad se necesita para escribir el Uri como esto:

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

Coge una copia de Reflector (Lutz ha entregado esta terminado ahora). Utilizar eso para mirar el montaje y el espacio de nombres, etc de los recursos en ella.

A continuación, lea algo en el recurso incrustado como esto;

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();
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top