private static IEnumerable <AssemblyPart> GetDeploymentParts(Colosoft.IO.Compression.ZipArchive zipArchive) { var file = zipArchive.Files.Where(f => f.Name == "AppManifest.xaml").FirstOrDefault(); if (file == null) { throw new InvalidOperationException("AppManifest not found."); } var list = new List <AssemblyPart>(); System.IO.Stream resourceStream = null; try { using (var stream = file.OpenRead()) { resourceStream = new System.IO.MemoryStream(); var buffer = new byte[1024]; var read = 0; while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) { resourceStream.Write(buffer, 0, read); } resourceStream.Seek(0, System.IO.SeekOrigin.Begin); } using (System.Xml.XmlReader reader = System.Xml.XmlReader.Create(resourceStream)) { if (!reader.ReadToFollowing("AssemblyPart")) { return(list); } do { string attribute = reader.GetAttribute("Source"); if (attribute != null) { AssemblyPart item = new AssemblyPart(); item.Source = attribute; list.Add(item); } }while (reader.ReadToNextSibling("AssemblyPart")); } } finally { if (resourceStream != null) { resourceStream.Dispose(); } } return(list); }
/// <summary> /// Constrói o resultado na stream informada. /// </summary> /// <param name="items"></param> /// <param name="outStream"></param> public static void Build(IEnumerable <Item> items, System.IO.Stream outStream) { items.Require("items").NotNull(); using (var zipArchive = new Colosoft.IO.Compression.ZipArchive(outStream, System.IO.FileAccess.Write)) { foreach (var i in items) { var stream = i.Stream; if (stream != null) { zipArchive.CopyFromStream(i.Stream, i.LastWriteTime, string.Format("{0}.xap", i.Uid.ToString())); } } } }