/// <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); } }
/// <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))); } } } } }