16

我在文件系统的某个地方有一个程序集,例如“C:\temp\test.dll”。在该程序集中有一个 ResourceDictionary,例如“abc.xaml”。

我怎样才能得到那个 ResourceDictionary?也许有一种使用反射的方法?到目前为止我还没有找到解决方案。

提前致谢!

编辑:只是想补充一点,我想访问字典中的资源,例如样式。

4

3 回答 3

20

您实际上需要像这样编写 Uri:

Assembly.LoadFrom(@"C:\temp\test.dll");
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri(@"pack://application:,,,/test;component/myresource.xaml");
于 2009-05-28T07:30:32.203 回答
10

编辑:我找到了一个更好的解决方案,它适用于 ResourceDictionaries:

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

好吧,我无法让它与 ResourceDictionaries 一起使用,所以我改用了旧的资源文件;)对于任何感兴趣的人,我是这样做的:

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

正如 Ian 所建议的,您可以使用 Reflector 获得“NameOfResource”。

于 2009-04-03T07:56:16.797 回答
2

拿一份Reflector的副本(Lutz 已经把它交给了)。使用它来查看其中资源的程序集和名称空间等。

然后像这样读入嵌入式资源;

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();
    }
}
于 2009-04-02T10:16:45.087 回答