Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }