コード例 #1
0
        /// <summary>
        /// Return the resolve package actions
        /// </summary>
        protected async Task <IEnumerable <Tuple <NuGetProject, NuGetProjectAction> > > GetActions(
            INuGetUI uiService,
            IEnumerable <NuGetProject> targets,
            UserAction userAction,
            bool removeDependencies,
            bool forceRemove,
            ResolutionContext resolutionContext,
            INuGetProjectContext projectContext,
            CancellationToken token)
        {
            List <Tuple <NuGetProject, NuGetProjectAction> > results = new List <Tuple <NuGetProject, NuGetProjectAction> >();

            Debug.Assert(userAction.PackageId != null, "Package id can never be null in a User action");
            if (userAction.Action == NuGetProjectActionType.Install)
            {
                Debug.Assert(userAction.PackageIdentity != null, "Package identity cannot be null when installing a package");

                foreach (var target in targets)
                {
                    IEnumerable <NuGetProjectAction> actions;
                    actions = await _packageManager.PreviewInstallPackageAsync(target, userAction.PackageIdentity,
                                                                               resolutionContext, projectContext, uiService.ActiveSource, null, token);

                    results.AddRange(actions.Select(a => new Tuple <NuGetProject, NuGetProjectAction>(target, a)));
                }
            }
            else
            {
                UninstallationContext uninstallationContext = new UninstallationContext(
                    removeDependencies: removeDependencies,
                    forceRemove: forceRemove);

                foreach (var target in targets)
                {
                    IEnumerable <NuGetProjectAction> actions;
                    if (userAction.PackageIdentity != null)
                    {
                        actions = await _packageManager.PreviewUninstallPackageAsync(target, userAction.PackageIdentity, uninstallationContext, projectContext, token);
                    }
                    else
                    {
                        actions = await _packageManager.PreviewUninstallPackageAsync(target, userAction.PackageId, uninstallationContext, projectContext, token);
                    }
                    results.AddRange(actions.Select(a => new Tuple <NuGetProject, NuGetProjectAction>(target, a)));
                }
            }

            return(results);
        }
コード例 #2
0
        protected async Task <IReadOnlyList <ResolvedAction> > GetActionsForUninstallAsync(IEnumerable <NuGetProject> targets,
                                                                                           string packageId,
                                                                                           INuGetProjectContext projectContext,
                                                                                           UninstallationContext uninstallationContext,
                                                                                           CancellationToken token)
        {
            List <ResolvedAction> results = new List <ResolvedAction>();

            foreach (NuGetProject target in targets)
            {
                IEnumerable <PackageReference> oldInstalledPackages = await target.GetInstalledPackagesAsync(token);

                if (oldInstalledPackages != null && oldInstalledPackages.Any(t => t.PackageIdentity.Id.Equals(packageId, StringComparison.InvariantCultureIgnoreCase)))
                {
                    try
                    {
                        var actions = await _packageManager.PreviewUninstallPackageAsync(target, packageId, uninstallationContext, projectContext, token);

                        results.AddRange(actions.Select(a => new ResolvedAction(target, a)));
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(ex);
                        throw;
                    }
                }
            }

            return(results);
        }
コード例 #3
0
        public async ValueTask <IReadOnlyList <ProjectAction> > GetUninstallActionsAsync(
            string projectId,
            PackageIdentity packageIdentity,
            bool removeDependencies,
            bool forceRemove,
            CancellationToken cancellationToken)
        {
            Assumes.NotNullOrEmpty(projectId);
            Assumes.NotNull(packageIdentity);
            Assumes.False(packageIdentity.HasVersion);
            Assumes.NotNull(_state.SourceCacheContext);
            Assumes.NotNull(_state.ResolvedActions);
            Assumes.Null(_state.PackageIdentity);

            cancellationToken.ThrowIfCancellationRequested();

            return(await CatchAndRethrowExceptionAsync(async() =>
            {
                INuGetProjectContext projectContext = await ServiceLocator.GetInstanceAsync <INuGetProjectContext>();
                (bool success, NuGetProject? project) = await TryGetNuGetProjectMatchingProjectIdAsync(projectId);

                Assumes.True(success);
                Assumes.NotNull(project);

                var projectActions = new List <ProjectAction>();
                var uninstallationContext = new UninstallationContext(removeDependencies, forceRemove);

                NuGetPackageManager packageManager = await _sharedState.PackageManager.GetValueAsync(cancellationToken);
                IEnumerable <NuGetProjectAction> actions = await packageManager.PreviewUninstallPackageAsync(
                    project,
                    packageIdentity.Id,
                    uninstallationContext,
                    projectContext,
                    cancellationToken);

                foreach (NuGetProjectAction action in actions)
                {
                    var resolvedAction = new ResolvedAction(project, action);
                    var projectAction = new ProjectAction(
                        CreateProjectActionId(),
                        projectId,
                        action.PackageIdentity,
                        action.NuGetProjectActionType,
                        implicitActions: null);

                    _state.ResolvedActions[projectAction.Id] = resolvedAction;

                    projectActions.Add(projectAction);
                }

                return projectActions;
            }));
        }
コード例 #4
0
 public Task <IEnumerable <NuGetProjectAction> > PreviewUninstallPackageAsync(
     NuGetProject nuGetProject,
     string packageId,
     UninstallationContext uninstallationContext,
     INuGetProjectContext nuGetProjectContext,
     CancellationToken token)
 {
     return(packageManager.PreviewUninstallPackageAsync(
                nuGetProject,
                packageId,
                uninstallationContext,
                nuGetProjectContext,
                token
                ));
 }
コード例 #5
0
        /// <summary>
        /// Return the resolve package actions
        /// </summary>
        private async Task <IReadOnlyList <ResolvedAction> > GetActionsAsync(
            INuGetUI uiService,
            IEnumerable <NuGetProject> targets,
            UserAction userAction,
            bool removeDependencies,
            bool forceRemove,
            ResolutionContext resolutionContext,
            INuGetProjectContext projectContext,
            CancellationToken token)
        {
            var results = new List <ResolvedAction>();

            Debug.Assert(userAction.PackageId != null, "Package id can never be null in a User action");
            if (userAction.Action == NuGetProjectActionType.Install)
            {
                foreach (var target in targets)
                {
                    var actions = await _packageManager.PreviewInstallPackageAsync(
                        target,
                        new PackageIdentity(userAction.PackageId, userAction.Version),
                        resolutionContext,
                        projectContext,
                        uiService.ActiveSources,
                        null,
                        token);

                    results.AddRange(actions.Select(a => new ResolvedAction(target, a)));
                }
            }
            else
            {
                var uninstallationContext = new UninstallationContext(
                    removeDependencies: removeDependencies,
                    forceRemove: forceRemove);

                foreach (var target in targets)
                {
                    IEnumerable <NuGetProjectAction> actions;

                    actions = await _packageManager.PreviewUninstallPackageAsync(
                        target, userAction.PackageId, uninstallationContext, projectContext, token);

                    results.AddRange(actions.Select(a => new ResolvedAction(target, a)));
                }
            }

            return(results);
        }
コード例 #6
0
        private static async Task MainAsync(string[] args)
        {
            CustomNuGetLogger logger = new CustomNuGetLogger();

            DefaultFrameworkNameProvider frameworkNameProvider = new DefaultFrameworkNameProvider();
            string testAppFrameworkName = Assembly.GetExecutingAssembly().GetCustomAttributes(true)
                                          .OfType <System.Runtime.Versioning.TargetFrameworkAttribute>()
                                          .Select(x => x.FrameworkName)
                                          .FirstOrDefault();
            //string folderName = "netstandard1.1";
            //NuGetFramework currentFramework = folderName == null
            //	? NuGetFramework.AnyFramework
            //	: NuGetFramework.ParseFolder(folderName, frameworkNameProvider);
            NuGetFramework currentFramework = testAppFrameworkName == null
                                ? NuGetFramework.AnyFramework
                                : NuGetFramework.ParseFrameworkName(testAppFrameworkName, frameworkNameProvider);

            List <Lazy <INuGetResourceProvider> > resourceProviders = new List <Lazy <INuGetResourceProvider> >();

            resourceProviders.AddRange(Repository.Provider.GetCoreV3());

            PackageSource    packageSource    = new PackageSource("https://api.nuget.org/v3/index.json");
            SourceRepository sourceRepository = new SourceRepository(packageSource, resourceProviders);

            //Console.WriteLine("Getting metadata resource...");
            //PackageMetadataResource metadataResource = await sourceRepository.GetResourceAsync<PackageMetadataResource>();
            //Console.WriteLine("Getting search resource...");
            //PackageSearchResource searchResource = await sourceRepository.GetResourceAsync<PackageSearchResource>();
            //Console.WriteLine("Getting auto complete resource...");
            //AutoCompleteResource autoCompleteResource = await sourceRepository.GetResourceAsync<AutoCompleteResource>();
            //Console.WriteLine("Getting dependency info resource...");
            //DependencyInfoResource dependencyInfoResource = await sourceRepository.GetResourceAsync<DependencyInfoResource>();
            //Console.WriteLine("Getting download resource...");
            //DownloadResource downloadResource = await sourceRepository.GetResourceAsync<DownloadResource>();
            //
            //Console.WriteLine();
            //Console.WriteLine("-----------------------------------------------------------------------------");
            //Console.WriteLine();
            //Console.WriteLine("Getting metadata...");
            //IEnumerable<IPackageSearchMetadata> metadata = await metadataResource.GetMetadataAsync("Newtonsoft.Json", false, false, logger, CancellationToken.None);
            //metadata.Dump();
            //
            //Console.WriteLine();
            //Console.WriteLine("-----------------------------------------------------------------------------");
            //Console.WriteLine();
            //Console.WriteLine("Searching metadata...");
            //SearchFilter searchFilter = new SearchFilter(false, null);
            //metadata = await searchResource.SearchAsync("Newtonsoft.Json", searchFilter, 0, 10, logger, CancellationToken.None);
            //metadata.Dump();
            //
            //Console.WriteLine();
            //Console.WriteLine("-----------------------------------------------------------------------------");
            //Console.WriteLine();
            //Console.WriteLine("Resolving dependencies...");
            //IEnumerable<RemoteSourceDependencyInfo> dependencyInfo = await dependencyInfoResource.ResolvePackages("Newtonsoft.Json", logger, CancellationToken.None);
            //dependencyInfo.Dump();
            //
            //Console.WriteLine();
            //Console.WriteLine("-----------------------------------------------------------------------------");
            //Console.WriteLine();
            //Console.WriteLine("Resolving for target framework {0}...", currentFramework);
            //IEnumerable<SourcePackageDependencyInfo> dependencyInfo2 = await dependencyInfoResource.ResolvePackages("Newtonsoft.Json", currentFramework, logger, CancellationToken.None);
            //dependencyInfo2.Dump();

            Console.WriteLine();
            Console.WriteLine("-----------------------------------------------------------------------------");
            Console.WriteLine();
            Console.WriteLine("Installing for target framework {0}...", currentFramework);

            string rootPath   = "ProjectRoot";
            string targetPath = Path.Combine(rootPath, "Packages");

            if (!Directory.Exists(targetPath))
            {
                Directory.CreateDirectory(targetPath);
            }
            ISettings                settings        = new CustomNuGetSettings(rootPath);
            PackageSourceProvider    sourceProvider  = new PackageSourceProvider(settings);
            SourceRepositoryProvider repoProvider    = new SourceRepositoryProvider(sourceProvider, resourceProviders);
            CustomNuGetProject       project         = new CustomNuGetProject(targetPath, currentFramework);
            CustomSolutionManager    solutionManager = new CustomSolutionManager(rootPath, project);
            NuGetPackageManager      manager         = new NuGetPackageManager(repoProvider, settings, solutionManager, new CustomDeleteManager());

            bool allowPrereleaseVersions        = true;
            bool allowUnlisted                  = false;
            ResolutionContext resolutionContext = new ResolutionContext(
                DependencyBehavior.Lowest,
                allowPrereleaseVersions,
                allowUnlisted,
                VersionConstraints.ExactMajor);
            UninstallationContext uninstallContext = new UninstallationContext(
                true,
                false);
            INuGetProjectContext    projectContext     = new CustomNuGetProjectContext();
            List <SourceRepository> sourceRepositories = new List <SourceRepository>();

            sourceRepositories.Add(sourceRepository);

            Console.WriteLine("Preview for package install...");
            IEnumerable <NuGetProjectAction> installActions = await manager.PreviewInstallPackageAsync(
                project,
                new PackageIdentity("Newtonsoft.Json", new NuGetVersion(10, 0, 2)),
                resolutionContext,
                projectContext,
                sourceRepositories,
                Enumerable.Empty <SourceRepository>(),
                CancellationToken.None);

            Console.WriteLine("Execute package install...");
            await manager.ExecuteNuGetProjectActionsAsync(
                project,
                installActions,
                projectContext,
                CancellationToken.None);

            Console.WriteLine("Preview for package update...");
            IEnumerable <NuGetProjectAction> updateActions = await manager.PreviewUpdatePackagesAsync(
                new PackageIdentity("Newtonsoft.Json", new NuGetVersion(10, 0, 3)),
                new[] { project },
                resolutionContext,
                projectContext,
                sourceRepositories,
                Enumerable.Empty <SourceRepository>(),
                CancellationToken.None);

            Console.WriteLine("Execute package update...");
            await manager.ExecuteNuGetProjectActionsAsync(
                project,
                updateActions,
                projectContext,
                CancellationToken.None);

            Console.WriteLine("Preview for package uninstall...");
            IEnumerable <NuGetProjectAction> uninstallActions = await manager.PreviewUninstallPackageAsync(
                project,
                new PackageIdentity("Newtonsoft.Json", new NuGetVersion(10, 0, 3)),
                uninstallContext,
                projectContext,
                CancellationToken.None);

            Console.WriteLine("Execute package uninstall...");
            await manager.ExecuteNuGetProjectActionsAsync(
                project,
                uninstallActions,
                projectContext,
                CancellationToken.None);

            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine("Done");
        }