示例#1
0
        protected async Task InstallPackageByIdAsync(
            NuGetProject project,
            string packageId,
            ResolutionContext resolutionContext,
            INuGetProjectContext projectContext,
            bool isPreview)
        {
            try {
                var packageManager = ConsoleHost.CreatePackageManager();

                var latestVersion = await packageManager.GetLatestVersionAsync(
                    packageId,
                    project,
                    resolutionContext,
                    PrimarySourceRepositories,
                    new LoggerAdapter (projectContext),
                    ConsoleHost.Token);

                if (latestVersion == null)
                {
                    throw new InvalidOperationException(GettextCatalog.GetString("Unable to find package '{0}", packageId));
                }

                var identity = new PackageIdentity(Id, latestVersion.LatestVersion);

                var actions = await packageManager.PreviewInstallPackageAsync(
                    project,
                    identity,
                    resolutionContext,
                    projectContext,
                    PrimarySourceRepositories,
                    null,
                    CancellationToken.None);

                if (isPreview)
                {
                    PreviewNuGetPackageActions(actions);
                }
                else
                {
                    NuGetPackageManager.SetDirectInstall(identity, projectContext);
                    await packageManager.ExecuteNuGetProjectActionsAsync(project, actions, this, ConsoleHost.Token);

                    NuGetPackageManager.ClearDirectInstall(projectContext);
                }
            } catch (InvalidOperationException ex) {
                if (ex.InnerException is PackageAlreadyInstalledException)
                {
                    Log(ProjectManagement.MessageLevel.Info, ex.Message);
                }
                else
                {
                    throw ex;
                }
            }
        }
        async Task PreviewAndExecuteUpdateActionsforAllPackages(NuGetProject project)
        {
            var packageManager = ConsoleHost.CreatePackageManager();
            var actions        = await packageManager.PreviewUpdatePackagesAsync(
                project,
                CreateResolutionContext(),
                this,
                PrimarySourceRepositories,
                PrimarySourceRepositories,
                ConsoleHost.Token);

            await ExecuteActions(project, actions, packageManager);
        }
示例#3
0
        protected async Task InstallPackageByIdentityAsync(
            NuGetProject project,
            PackageIdentity identity,
            ResolutionContext resolutionContext,
            INuGetProjectContext projectContext,
            bool isPreview)
        {
            try {
                var packageManager = ConsoleHost.CreatePackageManager();

                var actions = await packageManager.PreviewInstallPackageAsync(
                    project,
                    identity,
                    resolutionContext,
                    projectContext,
                    PrimarySourceRepositories,
                    null,
                    ConsoleHost.Token);

                if (isPreview)
                {
                    PreviewNuGetPackageActions(actions);
                }
                else
                {
                    NuGetPackageManager.SetDirectInstall(identity, projectContext);
                    await packageManager.ExecuteNuGetProjectActionsAsync(
                        project,
                        actions,
                        this,
                        resolutionContext.SourceCacheContext,
                        ConsoleHost.Token);

                    NuGetPackageManager.ClearDirectInstall(projectContext);
                }
            } catch (InvalidOperationException ex) {
                if (ex.InnerException is PackageAlreadyInstalledException)
                {
                    Log(ProjectManagement.MessageLevel.Info, ex.Message);
                }
                else
                {
                    throw ex;
                }
            }
        }
        protected async Task UninstallPackageByIdAsync(
            NuGetProject project,
            string packageId,
            UninstallationContext uninstallContext,
            INuGetProjectContext projectContext,
            bool isPreview)
        {
            ConsoleHostNuGetPackageManager   packageManager = ConsoleHost.CreatePackageManager();
            IEnumerable <NuGetProjectAction> actions        = await packageManager.PreviewUninstallPackageAsync(project, packageId, uninstallContext, projectContext, ConsoleHost.Token);

            if (isPreview)
            {
                PreviewNuGetPackageActions(actions);
            }
            else
            {
                await packageManager.ExecuteNuGetProjectActionsAsync(project, actions, projectContext, ConsoleHost.Token);
            }
        }
        async Task PreviewAndExecuteUpdateActionsforSinglePackage(NuGetProject project)
        {
            ConsoleHostNuGetPackageManager packageManager = null;

            var installedPackage = (await project.GetInstalledPackagesAsync(ConsoleHost.Token))
                                   .FirstOrDefault(p => string.Equals(p.PackageIdentity.Id, Id, StringComparison.OrdinalIgnoreCase));

            if (installedPackage != null)
            {
                // set _installed to true, if package to update is installed.
                isPackageInstalled = true;

                packageManager = ConsoleHost.CreatePackageManager();
                var actions = Enumerable.Empty <NuGetProjectAction> ();

                var resolutionContext = CreateResolutionContext();
                // If -Version switch is specified
                if (!string.IsNullOrEmpty(Version))
                {
                    actions = await packageManager.PreviewUpdatePackagesAsync(
                        new PackageIdentity (installedPackage.PackageIdentity.Id, PowerShellCmdletsUtility.GetNuGetVersionFromString(Version)),
                        project,
                        resolutionContext,
                        this,
                        PrimarySourceRepositories,
                        EnabledSourceRepositories,
                        ConsoleHost.Token);
                }
                else
                {
                    actions = await packageManager.PreviewUpdatePackagesAsync(
                        installedPackage.PackageIdentity.Id,
                        project,
                        resolutionContext,
                        this,
                        PrimarySourceRepositories,
                        EnabledSourceRepositories,
                        ConsoleHost.Token);
                }

                await ExecuteActions(project, actions, packageManager, resolutionContext.SourceCacheContext);
            }
        }
        async Task ExecuteInitScriptsAsync()
        {
            var projects       = ConsoleHost.GetNuGetProjects().ToList();
            var packageManager = ConsoleHost.CreatePackageManager();

            var packagesByFramework  = new Dictionary <NuGetFramework, HashSet <PackageIdentity> > ();
            var sortedGlobalPackages = new List <PackageIdentity>();

            foreach (var project in projects)
            {
                var buildIntegratedProject = project as BuildIntegratedNuGetProject;

                if (buildIntegratedProject != null)
                {
                    var packages = await BuildIntegratedProjectUtility
                                   .GetOrderedProjectPackageDependencies(buildIntegratedProject);

                    sortedGlobalPackages.AddRange(packages);
                }
                else
                {
                    // Read packages.config
                    var installedRefs = await project.GetInstalledPackagesAsync(CancellationToken.None);

                    if (installedRefs?.Any() == true)
                    {
                        // Index packages.config references by target framework since this affects dependencies
                        NuGetFramework targetFramework;
                        if (!project.TryGetMetadata(NuGetProjectMetadataKeys.TargetFramework, out targetFramework))
                        {
                            targetFramework = NuGetFramework.AnyFramework;
                        }

                        HashSet <PackageIdentity> fwPackages;
                        if (!packagesByFramework.TryGetValue(targetFramework, out fwPackages))
                        {
                            fwPackages = new HashSet <PackageIdentity> ();
                            packagesByFramework.Add(targetFramework, fwPackages);
                        }

                        fwPackages.UnionWith(installedRefs.Select(reference => reference.PackageIdentity));
                    }
                }
            }

            // Each id/version should only be executed once
            var finishedPackages = new HashSet <PackageIdentity>();

            // Packages.config projects
            if (packagesByFramework.Count > 0)
            {
                await ExecuteInitPs1ForPackagesConfig(
                    packageManager,
                    packagesByFramework,
                    finishedPackages);
            }

            // build integrated projects
            if (sortedGlobalPackages.Count > 0)
            {
                ExecuteInitPs1ForBuildIntegrated(
                    sortedGlobalPackages,
                    finishedPackages);
            }
        }