从ResourceDictionary中外部程序集[从UnmanagedMemoryStream阅读对象] [英] ResourceDictionary From External Assembly [read object from UnmanagedMemoryStream]

查看:682
本文介绍了从ResourceDictionary中外部程序集[从UnmanagedMemoryStream阅读对象]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 UnmanagedMemoryStream 在下面的代码,我怎样才能从deserilizing它获取的对象。我试图让一个资源大会(rd.xaml):

I have an UnmanagedMemoryStream in below code, How can I get the object from deserilizing it. I was trying to get a Resource (rd.xaml) from an Assembly :

string address = @"WpfControlLibrary1.dll";
Assembly skinAssembly = Assembly.LoadFrom(address);
string name = skinAssembly.GetName().Name +".g";
var manager = new ResourceManager(name, skinAssembly);
ResourceSet rs = manager.GetResourceSet(CultureInfo.CurrentCulture, true, true);

UnmanagedMemoryStream stream = (UnmanagedMemoryStream)rs.GetObject("rd.baml", true);



我不能够反序列化到.NET 对象(这是内容的资源词典在上述情况下)。我怎样才能做到这一点。

I'm not able to deserialize the content of Stream into a .net Object(which is a Resource Dictionary in above case). How can I do this?

PS: 的BinaryFormatter 抛出一个异常,而反序列化操作。

PS: BinaryFormatter is throwing an exception while Deserialize operation.

推荐答案

下面是如何我已经做到了,用优化的代码:

Below is how I've done it, with optimized code:

public ResourceDictionary GetResourceDictionary(string assemblyName)
    {
        Assembly asm = Assembly.LoadFrom(assemblyName);
        Stream stream = asm.GetManifestResourceStream(asm.GetName().Name + ".g.resources");            
        using (ResourceReader reader = new ResourceReader(stream))
        {
            foreach (DictionaryEntry entry in reader)
            {
                var readStream = entry.Value as Stream;
                Baml2006Reader bamlReader = new Baml2006Reader(readStream);
                var loadedObject = System.Windows.Markup.XamlReader.Load(bamlReader);
                if (loadedObject is ResourceDictionary)
                {
                    return loadedObject as ResourceDictionary;
                }
            }
        }
        return null;
    }



输出:

OUTPUT:

我想读 ResourceDictionary中,所以,我可以重复它的资源
使用。

I wanted to read a ResourceDictionary from an External Assembly/Another Project, So that I can iterate it's Resources to use.

这篇关于从ResourceDictionary中外部程序集[从UnmanagedMemoryStream阅读对象]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆