Domanda

Ho un assemblaggio da qualche parte nel file system, ad esempio, "C: \ temp \ test.dll". In tale complesso c'è un ResourceDictionary, ad esempio "Abc.xaml".

Come posso ottenere che ResourceDictionary? Forse c'è un modo utilizzando Riflessioni? Non ho trovato una soluzione finora.

Grazie in anticipo!

Modifica: Volevo solo aggiungere che voglio accedere alle risorse nel Dizionario, per esempio uno stile.

È stato utile?

Soluzione 2

Modifica Ho trovato una soluzione ancora migliore che funziona con ResourceDictionaries:

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

Beh, non ho potuto farlo funzionare con ResourceDictionaries, quindi sto usando bene i vecchi file di risorse, invece;) Per chiunque sia interessato, ecco come ho fatto:

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

È possibile ottenere "NameOfResource" con riflettore, come suggerito Ian.

Altri suggerimenti

In realtà è necessario scrivere l'Uri in questo modo:

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

prendere una copia di Riflettore (Lutz ha consegnato questo finito). Utilizzare che a guardare il montaggio e l'etc spazio dei nomi delle risorse in esso.

Poi leggi in qualcosa di risorsa incorporata come questo;

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();
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top