public static PluginPackage FromDirectory(String directory) { var package = (PluginPackage)null; if (!File.Exists(Path.Combine(directory, "contents.xml"))) { throw new FileNotFoundException("'contents.xml' is missing!", "contents.xml"); } using (var stream = File.Open(Path.Combine(directory, "contents.xml"), FileMode.Open, FileAccess.Read, FileShare.Read)) { var contents = PluginPackageContentsXml.FromStream(stream); package = new PluginPackage(contents.Id, contents.Name, contents.Version, contents.Target, contents.Type); foreach (var file in contents.Files) { var path = Path.Combine(directory, file.Name); if (!File.Exists(path)) { throw new FileNotFoundException("The package file '" + file.Name + "' is missing!", file.Name); } package.files.Add(new PluginPackageFile(file.Name, File.ReadAllBytes(path))); } foreach (var reference in contents.References) { package.references.Add(new PluginPackageReference(reference.Id, reference.Version)); } } return(package); }
public static PluginPackage FromArchive(ZipFile archive) { var package = (PluginPackage)null; var contentsEntry = archive.FirstOrDefault(file => file.FileName == "contents.xml"); if (contentsEntry == null) { throw new FileNotFoundException("'contents.xml' is missing!", "contents.xml"); } using (var stream = contentsEntry.ToStream()) { var contents = PluginPackageContentsXml.FromStream(stream); package = new PluginPackage(contents.Id, contents.Name, contents.Version, contents.Target, contents.Type); foreach (var file in contents.Files) { var entry = archive.FirstOrDefault(a => a.FileName == file.Name); if (entry == null) { throw new FileNotFoundException("The package file '" + file.Name + "' is missing!", file.Name); } package.files.Add(new PluginPackageFile(file.Name, entry.ToBytes())); } foreach (var reference in contents.References) { package.references.Add(new PluginPackageReference(reference.Id, reference.Version)); } } return(package); }