コード例 #1
0
        public async Task UpdateAsync(IEnumerable <NuGetProject> projects,
                                      IEnumerable <PackageIdentity> packages,
                                      bool shouldThrow,
                                      CancellationToken token)
        {
            MyProjectContext projectContext = new MyProjectContext(FileConflictAction.OverwriteAll)
            {
                ActionType = NuGetActionType.UpdateAll,
                PackageExtractionContext = _packageExtractionContext
            };

            List <ProjectInstallActionSummaryModel> projectActionSummarys = new List <ProjectInstallActionSummaryModel>();

            foreach (NuGetProject item in projects)
            {
                ProjectInstallActionSummaryModel summary = new ProjectInstallActionSummaryModel(item);

                await summary.LoadInstalledPackagesAsync(token);

                summary.UpdateFromPackageList(packages);

                projectActionSummarys.Add(summary);
            }

            var installProjects = projectActionSummarys.Where(t => t.NeedUpdate?.Any() == true);

            if (installProjects.Any())
            {
                await UpdatePackagesInternalAsync(installProjects, projectContext, shouldThrow, token);
            }
        }
コード例 #2
0
        public async Task UninstallAsync(IEnumerable <NuGetProject> projects, IEnumerable <string> packages, bool removeDependencies, bool forceRemove, bool shouldThrow, CancellationToken token)
        {
            MyProjectContext projectContext = new MyProjectContext(FileConflictAction.OverwriteAll)
            {
                ActionType = NuGetActionType.Uninstall,
                PackageExtractionContext = _packageExtractionContext
            };

            // sort packages
            // packages = SortPackagesWhenUninstallAsync(projects, packages);

            foreach (string packageId in packages)
            {
                var uninstallationContext = new UninstallationContext(removeDependencies, forceRemove);
                IReadOnlyList <ResolvedAction> actions = await GetActionsForUninstallAsync(
                    uninstallationContext : uninstallationContext,
                    targets : projects,
                    packageId : packageId,
                    projectContext : projectContext,
                    token : token);

                if (actions.Count != 0)
                {
                    PackageUninstalling?.Invoke(packageId);

                    try
                    {
                        await ExecuteActionsAsync(actions, null, projectContext, NullSourceCacheContext.Instance, token);
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(ex);
                        if (shouldThrow)
                        {
                            throw;
                        }
                    }
                    finally
                    {
                        PackageUninstalled?.Invoke(packageId);
                    }
                }
            }
        }