示例#1
0
        public async Task <bool> InstallPackage(PackageIdentity identity)
        {
            await Download(identity);

            var packagePathResolver = new NuGet.Packaging.PackagePathResolver(Packagesfolder);
            var installedPath       = packagePathResolver.GetInstalledPath(identity);

            PackageReaderBase packageReader;

            packageReader = new PackageFolderReader(installedPath);
            var libItems         = packageReader.GetLibItems();
            var frameworkReducer = new FrameworkReducer();
            var nearest          = frameworkReducer.GetNearest(NuGetFramework, libItems.Select(x => x.TargetFramework));
            var files            = libItems
                                   .Where(x => x.TargetFramework.Equals(nearest))
                                   .SelectMany(x => x.Items).ToList();

            foreach (var f in files)
            {
                InstallFile(installedPath, f);
            }

            var cont = packageReader.GetContentItems();

            nearest = frameworkReducer.GetNearest(NuGetFramework, cont.Select(x => x.TargetFramework));
            files   = cont
                      .Where(x => x.TargetFramework.Equals(nearest))
                      .SelectMany(x => x.Items).ToList();
            foreach (var f in files)
            {
                InstallFile(installedPath, f);
            }

            try
            {
                var dependencies = packageReader.GetPackageDependencies();
                nearest = frameworkReducer.GetNearest(NuGetFramework, dependencies.Select(x => x.TargetFramework));
                foreach (var dep in dependencies.Where(x => x.TargetFramework.Equals(nearest)))
                {
                    foreach (var p in dep.Packages)
                    {
                        var local = getLocal(p.Id);
                        await InstallPackage(local.Identity);
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.LogError(ex.ToString());
            }

            if (System.IO.Directory.Exists(installedPath + @"\build"))
            {
                CopyDir.Copy(installedPath + @"\build", Destinationfolder);
            }

            return(true);
        }
示例#2
0
        public void UninstallPackage(PackageIdentity identity)
        {
            var package             = getLocal(identity.Id);
            var packagePathResolver = new NuGet.Packaging.PackagePathResolver(Packagesfolder);
            var installedPath       = packagePathResolver.GetInstalledPath(package.Identity);

            PackageReaderBase packageReader;

            packageReader = new PackageFolderReader(installedPath);
            var libItems         = packageReader.GetLibItems();
            var frameworkReducer = new FrameworkReducer();
            var nearest          = frameworkReducer.GetNearest(NuGetFramework, libItems.Select(x => x.TargetFramework));
            var files            = libItems
                                   .Where(x => x.TargetFramework.Equals(nearest))
                                   .SelectMany(x => x.Items).ToList();

            foreach (var f in files)
            {
                RemoveFile(installedPath, f);
            }

            var cont = packageReader.GetContentItems();

            nearest = frameworkReducer.GetNearest(NuGetFramework, cont.Select(x => x.TargetFramework));
            files   = cont
                      .Where(x => x.TargetFramework.Equals(nearest))
                      .SelectMany(x => x.Items).ToList();
            foreach (var f in files)
            {
                InstallFile(installedPath, f);
            }

            if (System.IO.Directory.Exists(installedPath + @"\build"))
            {
                if (System.IO.Directory.Exists(installedPath + @"\build\x64"))
                {
                    foreach (var f in System.IO.Directory.GetFiles(installedPath + @"\build\x64"))
                    {
                        var filename = System.IO.Path.GetFileName(f);
                        var target   = System.IO.Path.Combine(Destinationfolder, filename);
                        if (System.IO.File.Exists(target))
                        {
                            try
                            {
                                System.IO.File.Delete(target);
                            }
                            catch (Exception)
                            {
                            }
                        }
                    }
                }
            }
        }
示例#3
0
        /// <summary>
        /// Добавляет в содержимое пакета совместимые версии файлов из указанного пакета.
        /// </summary>
        /// <param name="packageContent">Содержимое пакета.</param>
        /// <param name="packageIdentity">Идентификатор пакета.</param>
        /// <param name="targetFramework">Версия совместимого фреймворка.</param>
        /// <param name="compatibilityProvider">Провайдер для проверки совместимости фреймворков.</param>
        private void FillPackageContent(PackageContent packageContent,
                                        PackageIdentity packageIdentity,
                                        NuGetFramework targetFramework,
                                        IFrameworkCompatibilityProvider compatibilityProvider)
        {
            var packagePath = GetPackagePath(packageIdentity);

            using (var reader = new PackageFolderReader(packagePath))
            {
                var libItems = GetCompatibleItems(reader, reader.GetLibItems().ToList(), targetFramework, compatibilityProvider);

                if (libItems?.Items != null)
                {
                    foreach (var item in libItems.Items)
                    {
                        var installItem = GetPackageItem(packagePath, item, PackagingConstants.Folders.Lib, libItems.TargetFramework);
                        packageContent.Lib.Add(installItem);
                    }
                }

                var contentItems = GetCompatibleItems(reader, reader.GetContentItems().ToList(), targetFramework, compatibilityProvider);

                if (contentItems?.Items != null)
                {
                    foreach (var item in contentItems.Items)
                    {
                        var installItem = GetPackageItem(packagePath, item, PackagingConstants.Folders.Content, contentItems.TargetFramework);
                        packageContent.Content.Add(installItem);
                    }
                }

                var pluginItems = GetCompatibleItems(reader, reader.GetPluginItems().ToList(), targetFramework, compatibilityProvider);

                if (pluginItems?.Items != null)
                {
                    foreach (var item in pluginItems.Items)
                    {
                        var installItem = GetPackageItem(packagePath, item, PluginFolderName, pluginItems.TargetFramework);
                        packageContent.Plugin.Add(installItem);
                    }
                }
            }
        }
示例#4
0
        public void UninstallPackage(string TargetFolder, PackageIdentity identity)
        {
            var packagePathResolver = new PackagePathResolver(PackagesInstallFolder);
            var installedPath       = packagePathResolver.GetInstalledPath(identity);

            PackageReaderBase packageReader;

            packageReader = new PackageFolderReader(installedPath);
            var libItems         = packageReader.GetLibItems();
            var frameworkReducer = new FrameworkReducer();
            var nearest          = frameworkReducer.GetNearest(NuGetFramework, libItems.Select(x => x.TargetFramework));
            var files            = libItems
                                   .Where(x => x.TargetFramework.Equals(nearest))
                                   .SelectMany(x => x.Items).ToList();

            foreach (var f in files)
            {
                UninstallFile(TargetFolder, installedPath, f);
            }

            var cont = packageReader.GetContentItems();

            nearest = frameworkReducer.GetNearest(NuGetFramework, cont.Select(x => x.TargetFramework));
            files   = cont
                      .Where(x => x.TargetFramework.Equals(nearest))
                      .SelectMany(x => x.Items).ToList();
            foreach (var f in files)
            {
                UninstallFile(TargetFolder, installedPath, f);
            }

            try
            {
                var dependencies = packageReader.GetPackageDependencies();
                nearest = frameworkReducer.GetNearest(NuGetFramework, dependencies.Select(x => x.TargetFramework));
                foreach (var dep in dependencies.Where(x => x.TargetFramework.Equals(nearest)))
                {
                    foreach (var p in dep.Packages)
                    {
                        var local = getLocal(p.Id);
                        UninstallPackage(TargetFolder, local.Identity);
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex.ToString());
            }

            if (System.IO.Directory.Exists(installedPath + @"\build"))
            {
                if (System.IO.Directory.Exists(installedPath + @"\build\x64"))
                {
                    foreach (var f in System.IO.Directory.GetFiles(installedPath + @"\build\x64"))
                    {
                        var filename = System.IO.Path.GetFileName(f);
                        var target   = System.IO.Path.Combine(TargetFolder, filename);
                        if (System.IO.File.Exists(target))
                        {
                            try
                            {
                                System.IO.File.Delete(target);
                            }
                            catch (Exception)
                            {
                                PendingDeletion.Add(target);
                            }
                        }
                    }
                }
            }
        }
示例#5
0
        public bool InstallPackage(string TargetFolder, PackageIdentity identity, bool LoadDlls)
        {
            bool ret = true;

            var packagePathResolver = new NuGet.Packaging.PackagePathResolver(PackagesInstallFolder);
            var installedPath       = packagePathResolver.GetInstalledPath(identity);

            PackageReaderBase packageReader;

            packageReader = new PackageFolderReader(installedPath);
            var libItems         = packageReader.GetLibItems();
            var frameworkReducer = new FrameworkReducer();
            var nearest          = frameworkReducer.GetNearest(NuGetFramework, libItems.Select(x => x.TargetFramework));
            var files            = libItems
                                   .Where(x => x.TargetFramework.Equals(nearest))
                                   .SelectMany(x => x.Items).ToList();

            foreach (var f in files)
            {
                InstallFile(TargetFolder, installedPath, f, LoadDlls);
            }

            var cont = packageReader.GetContentItems();

            nearest = frameworkReducer.GetNearest(NuGetFramework, cont.Select(x => x.TargetFramework));
            files   = cont
                      .Where(x => x.TargetFramework.Equals(nearest))
                      .SelectMany(x => x.Items).ToList();
            foreach (var f in files)
            {
                InstallFile(TargetFolder, installedPath, f, LoadDlls);
            }

            try
            {
                var dependencies = packageReader.GetPackageDependencies();
                nearest = frameworkReducer.GetNearest(NuGetFramework, dependencies.Select(x => x.TargetFramework));
                foreach (var dep in dependencies.Where(x => x.TargetFramework.Equals(nearest)))
                {
                    foreach (var p in dep.Packages)
                    {
                        var local = getLocal(p.Id);
                        InstallPackage(TargetFolder, local.Identity, LoadDlls);
                    }
                }
            }
            catch (Exception ex)
            {
                ret = false;
                Log.Error(ex.ToString());
            }

            if (System.IO.Directory.Exists(installedPath + @"\build"))
            {
                if (System.IO.Directory.Exists(installedPath + @"\build\x64"))
                {
                    foreach (var f in System.IO.Directory.GetFiles(installedPath + @"\build\x64"))
                    {
                        var filename = System.IO.Path.GetFileName(f);
                        var target   = System.IO.Path.Combine(TargetFolder, filename);
                        CopyIfNewer(f, target);
                    }
                }
            }

            return(ret);
        }