Pergunta

Eu tenho um lugar de montagem no sistema de arquivos, por exemplo, "C: \ temp \ teste.dll". Em que a montagem há um ResourceDictionary, v.g. "Abc.xaml".

Como posso obter que ResourceDictionary? Talvez haja uma maneira usando Reflexões? Eu não encontrar uma solução até agora.

Agradecemos antecipadamente!

Edit: Só queria acrescentar que eu quero acessar os recursos no dicionário, por exemplo, um estilo.

Foi útil?

Solução 2

Editar: eu encontrei uma solução ainda melhor que trabalha com ResourceDictionaries:

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

Bem, eu não poderia obtê-lo para trabalhar com ResourceDictionaries, por isso estou usando o bom e velho arquivos de recursos em vez;) Para quem estiver interessado, aqui está como eu fiz isso:

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

Você pode obter "NameOfResource" com refletor, como Ian sugeriu.

Outras dicas

Você realmente precisa para escrever o Uri assim:

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

pegar uma cópia do Reflector (Lutz entregou esta acabado agora). Use isso a olhar para a montagem e o namespace etc dos recursos nele.

Em seguida, leu no algo recurso incorporado como esta;

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top