我有silverlight XAP的字节数组。我需要从字节数组中提取xap中的所有dll。一旦我得到dll,我需要从它中提取程序集.Silverlight XAP存储在存储库中,存储库总是返回我的XAP字节数组.C#中是否有任何标准API可用于实现此功能?如果不是,我们如何实现这个?
的问候,阿布舍克巴克
答案 0 :(得分:3)
从字节数组中创建一个MemoryStream并调用此函数:
public List<Assembly> ExtractAssembliesFromXap(Stream stream) {
List<Assembly> assemblies = new List<Assembly>();
string appManifest = new StreamReader(Application.GetResourceStream(
new StreamResourceInfo(stream, null), new Uri("AppManifest.xaml",
UriKind.Relative)).Stream).ReadToEnd();
XElement deploy = XDocument.Parse(appManifest).Root;
List<XElement> parts = (from assemblyParts in deploy.Elements().Elements()
select assemblyParts).ToList();
foreach (XElement xe in parts) {
string source = xe.Attribute("Source").Value;
AssemblyPart asmPart = new AssemblyPart();
StreamResourceInfo streamInfo = Application.GetResourceStream(
new StreamResourceInfo(stream, "application/binary"),
new Uri(source, UriKind.Relative));
assemblies.Add(asmPart.Load(streamInfo.Stream));
}
return assemblies;
}
答案 1 :(得分:1)
没有可用的标准API,但它应该不难做到。 XAP文件只是一个具有不同扩展名的ZIP文件。使用像DotNetZip或SharpZipLib这样的库来获取其内容(这些库可以接受流或字节数组,因此您应该能够将XAP字节数组直接传递到它们中以提取文件)。通过获取DLL并从中提取程序集,我不确定你的意思 - 你从XAP文件中提取的DLL是程序集。
希望这会有所帮助......
克里斯