Question

J'ai un ensemble quelque part sur le système de fichiers, par exemple "C: \ temp \ test.dll". Dans cette assemblée, il y a un ResourceDictionary, par exemple "Abc.xaml".

Comment puis-je obtenir ce ResourceDictionary? Peut-être il y a un moyen à l'aide Reflections? Je n'ai pas trouvé une solution à ce jour.

Merci d'avance!

Edit: Je voulais juste ajouter que je veux accéder aux ressources dans le dictionnaire, par exemple un style.

Était-ce utile?

La solution 2

Modifier J'ai trouvé une solution encore meilleure qui fonctionne avec ResourceDictionaries:

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

Eh bien, je ne pouvais pas obtenir de travailler avec ResourceDictionaries, donc je suis en utilisant le bon vieux fichiers de ressources à la place;) Pour les personnes intéressées, voici comment je l'ai fait:

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

Vous pouvez obtenir "NameOfResource" avec réflecteur, comme le suggère Ian.

Autres conseils

Vous avez réellement besoin d'écrire Uri comme ceci:

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

Prenez une copie de réflecteur (Lutz a remis ce plus maintenant). Utiliser pour regarder l'assemblage et l'espace de noms etc des ressources en elle.

Alors lire quelque chose de ressource incorporée comme celui-ci;

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();
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top