2016-04-17 17 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到 。

相關問題