ResourceDictionary From External Assembly [читать объект из UnmanagedMemoryStream]

У меня есть UnmanagedMemoryStream в нижнем коде, как я могу получить объект от его десерилизации. Я пытался получить Resource (rd.xaml) из 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);

Я не могу deserialize содержимое Stream в .net Object (что в Resource Dictionary в приведенном выше случае). Как я могу это сделать?

PS: BinaryFormatter выбрасывает исключение при операции deserialize.

Ответ 1

Ниже показано, как я это сделал, с оптимизированным кодом:

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

Я хотел прочитать a ResourceDictionary из внешнего собрания/другого проекта, чтобы я мог выполнить итерацию Resources до использовать.