Ejemplo n.º 1
0
        /// <summary>
        /// Install package by Id
        /// </summary>
        /// <param name="project"></param>
        /// <param name="packageId"></param>
        /// <param name="resolutionContext"></param>
        /// <param name="projectContext"></param>
        /// <param name="isPreview"></param>
        /// <param name="isForce"></param>
        /// <param name="uninstallContext"></param>
        /// <returns></returns>
        protected async Task InstallPackageByIdAsync(NuGetProject project, string packageId, ResolutionContext resolutionContext, INuGetProjectContext projectContext, bool isPreview, bool isForce = false, UninstallationContext uninstallContext = null)
        {
            List <NuGetProjectAction> actions = new List <NuGetProjectAction>();

            // For Install-Package -Force
            if (isForce)
            {
                PackageReference installedReference = project.GetInstalledPackagesAsync(CancellationToken.None).Result.Where(p =>
                                                                                                                             StringComparer.OrdinalIgnoreCase.Equals(packageId, p.PackageIdentity.Id)).FirstOrDefault();
                if (installedReference != null)
                {
                    actions.AddRange(await PackageManager.PreviewUninstallPackageAsync(project, packageId, uninstallContext, projectContext, CancellationToken.None));
                }
                NuGetVersion nVersion = PowerShellCmdletsUtility.GetLastestVersionForPackageId(ActiveSourceRepository, packageId, project, resolutionContext.IncludePrerelease);
                if (nVersion != null)
                {
                    PackageIdentity    identityToInstall = new PackageIdentity(packageId, nVersion);
                    NuGetProjectAction installAction     = NuGetProjectAction.CreateInstallProjectAction(identityToInstall, ActiveSourceRepository);
                    actions.Add(installAction);
                }
            }
            else
            {
                actions.AddRange(await PackageManager.PreviewInstallPackageAsync(project, packageId, resolutionContext, projectContext, ActiveSourceRepository, null, CancellationToken.None));
            }

            if (isPreview)
            {
                PreviewNuGetPackageActions(actions);
            }
            else
            {
                await PackageManager.ExecuteNuGetProjectActionsAsync(project, actions, this, CancellationToken.None);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Preview update actions for single package
        /// </summary>
        /// <param name="project"></param>
        /// <returns></returns>
        private async Task PreviewAndExecuteUpdateActionsforSinglePackage(NuGetProject project)
        {
            var token = CancellationToken.None;
            PackageReference installedPackage = (await project.GetInstalledPackagesAsync(token))
                                                .Where(p => string.Equals(p.PackageIdentity.Id, Id, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();

            // If package Id exists in Packages folder but is not actually installed to the current project, throw.
            if (installedPackage == null)
            {
                Log(MessageLevel.Error, string.Format(Resources.PackageNotInstalledInAnyProject, Id));
            }
            else
            {
                // If -Version switch is specified
                if (!string.IsNullOrEmpty(Version))
                {
                    PackageIdentity update = GetUpdatePackageIdentityWhenVersionSpecified(project, installedPackage);
                    if (update != null)
                    {
                        // Update by package identity
                        await InstallPackageByIdentityAsync(project, update, ResolutionContext, this, WhatIf.IsPresent, Reinstall.IsPresent, UninstallContext);
                    }
                    else
                    {
                        Log(MessageLevel.Info, string.Format(Resources.Cmdlet_NoPackageUpdates, project.GetMetadata <string>(NuGetProjectMetadataKeys.Name)));
                    }
                }
                else
                {
                    if (Reinstall.IsPresent)
                    {
                        // Update-Package Id -Reinstall
                        PackageIdentity identity = installedPackage.PackageIdentity;
                        await InstallPackageByIdentityAsync(project, identity, ResolutionContext, this, WhatIf.IsPresent, Reinstall.IsPresent, UninstallContext);
                    }
                    else
                    {
                        // Update-Package Id
                        NormalizePackageId(project);
                        NuGetVersion latestVersion = PowerShellCmdletsUtility.GetLastestVersionForPackageId(ActiveSourceRepository, Id, project, _allowPrerelease);
                        if (latestVersion > installedPackage.PackageIdentity.Version)
                        {
                            await InstallPackageByIdAsync(project, Id, ResolutionContext, this, WhatIf.IsPresent, Reinstall.IsPresent, UninstallContext);
                        }
                        else
                        {
                            Log(MessageLevel.Info, string.Format(Resources.Cmdlet_NoPackageUpdates, project.GetMetadata <string>(NuGetProjectMetadataKeys.Name)));
                        }
                    }
                }
            }
        }