예제 #1
0
        /// <summary>
        /// Recursively retrieve all components and their dependencies from NuGet packages
        /// </summary>
        /// <param name="projectFilePath"></param>
        /// <returns></returns>
        public async Task <HashSet <Component> > RecursivelyGetComponentsAsync(IEnumerable <NugetPackage> nugetPackges)
        {
            var components = new HashSet <Component>();

            // Initialize the queue with the current packages
            var packages = new Queue <NugetPackage>(nugetPackges);

            var visitedNugetPackages = new HashSet <NugetPackage>();

            while (packages.Count > 0)
            {
                var currentPackage = packages.Dequeue();
                var component      = await _nugetService.GetComponentAsync(currentPackage).ConfigureAwait(false);

                if (component == null)
                {
                    continue;
                }

                components.Add(component);

                // Add the current NuGet package to list of visited packages
                visitedNugetPackages.Add(currentPackage);
            }

            return(components);
        }
        /// <summary>
        /// Recursively retrieve all components and their dependencies from NuGet packages
        /// </summary>
        /// <param name="projectFilePath"></param>
        /// <returns></returns>
        public async Task <HashSet <Component> > RecursivelyGetComponentsAsync(IEnumerable <NugetPackage> nugetPackges)
        {
            var components = new HashSet <Component>();

            // Initialize the queue with the current packages
            var          packages = new Queue <NugetPackage>(nugetPackges);
            NugetPackage currentPackage;

            var visitedNugetPackages = new HashSet <NugetPackage>();

            while (packages.TryDequeue(out currentPackage))
            {
                var component = await _nugetService.GetComponentAsync(currentPackage);

                if (component == null)
                {
                    continue;
                }

                components.Add(component);

                // Add unvisited NuGet package dependencies to the queue
                foreach (var dependency in component.Dependencies)
                {
                    if (!visitedNugetPackages.Contains(dependency))
                    {
                        packages.Enqueue(dependency);
                    }
                }

                // Add the current NuGet package to list of visited packages
                visitedNugetPackages.Add(currentPackage);
            }

            return(components);
        }