来自外部程序集的ResourceDictionary
我在下面的代码中有一个UnmanagedMemoryStream
,我怎样才能让对象从deserilizing它。 我试图从Assembly
集中获取Resource
(rd.xaml):
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);
我无法将Stream
的内容deserialize
化为.net Object
(在上面的例子中是一个Resource Dictionary
)。 我怎样才能做到这一点?
PS: BinaryFormatter
在Deserialize
操作时抛出exception。
以下是我使用优化代码完成的方法:
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
,这样我就可以迭代它的Resources
来使用。