Caricare un ResourceDictionary da un assieme
-
22-08-2019 - |
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.
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();
}
}