2016-04-17 18 views
-2

我在下面的代码中有一个UnmanagedMemoryStream,我怎样才能得到它的对象去钝化它。我是从一个Assembly试图获得Resource(rd.xaml):ResourceDictionary来自外部程序集[从UnmanagedMemoryStream中读取对象]

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); 

我无法deserializeStream内容到.NET Object(在上述情况下,Resource Dictionary)。我怎样才能做到这一点?

PS:BinaryFormatter正在抛出异常,而Deserialize操作。

+0

什么异常?在哪一行? – cassandrad

+0

{“输入流不是有效的二进制格式,起始内容(以字节为单位)为:0C-00-00-00-4D-00-53-00-42-00-41-00-4D-00- 4C-00-00 ...“} –

+0

在我的代码中添加这些行:BinaryFormatter binForm = new BinaryFormatter(); Object obj =(Object)binForm.Deserialize(stream); –

回答

0

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

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:

output

我想读从ResourceDictionary外部议会/另一个项目,以便我可以迭代它的使用Resources到 。

相关问题