Esempio n. 1
0
        private IEnumerable <NugetPackage> GetPackageDependencies(string name, string version)
        {
            const string keyDelimiter     = "@@@";
            var          mapping          = _packageList.ToDictionary(c => c.Name + keyDelimiter + c.Version, StringComparer.InvariantCultureIgnoreCase);
            var          dependencies     = new List <NugetPackage>();
            var          nugetPackageFile = _solutionFolder + $@"\packages\{name}.{version}\{name}.{version}.nupkg";

            if (File.Exists(nugetPackageFile))
            {
                var package = new ZipPackage(nugetPackageFile);

                foreach (var dependency in package.GetCompatiblePackageDependencies(null))
                {
                    var key = mapping.Keys.SingleOrDefault(k => k.StartsWith(dependency.Id + keyDelimiter, StringComparison.InvariantCultureIgnoreCase));
                    if (key != null)
                    {
                        var dependentPackage = mapping[key];
                        dependencies.Add(new NugetPackage
                        {
                            Name    = dependentPackage.Name,
                            Version = dependentPackage.Version
                        });
                    }
                }
            }

            return(dependencies);
        }
        private IEnumerable <NugetPackage> GetPackageDependencies(string name, string version, Project project)
        {
            const string keyDelimiter     = "@@@";
            var          mapping          = _packageList.ToDictionary(c => c.Name + keyDelimiter + c.Version, StringComparer.InvariantCultureIgnoreCase);
            var          dependencies     = new List <NugetPackage>();
            var          nugetPackageFile = _solutionFolder + $@"\packages\{name}.{version}\{name}.{version}.nupkg";

            if (File.Exists(nugetPackageFile))
            {
                var package = new ZipPackage(nugetPackageFile);

                foreach (var dependency in package.GetCompatiblePackageDependencies(null))
                {
                    var keys = mapping.Keys.Where(k => k.StartsWith(dependency.Id + keyDelimiter, StringComparison.InvariantCultureIgnoreCase));

                    string key = null;

                    if (keys.Count().Equals(1))
                    {
                        key = keys.First();
                    }
                    else if (keys.Count() > 1 && project != null) //if we have multiple packages with various versions, figure out which version is being used for this project
                    {
                        var projectPackage = project.Packages.FirstOrDefault(k => k.Name.StartsWith(dependency.Id, StringComparison.InvariantCultureIgnoreCase));
                        if (projectPackage != null)
                        {
                            key = keys.FirstOrDefault(k => k.Equals(dependency.Id + keyDelimiter + projectPackage.Version, StringComparison.InvariantCultureIgnoreCase));
                        }
                    }

                    if (key != null)
                    {
                        var dependentPackage = mapping[key];

                        if (
                            !dependencies.Any(
                                d => d.Name.Equals(dependentPackage.Name) && d.Version.Equals(dependentPackage.Version)))
                        {
                            dependencies.Add(new NugetPackage
                            {
                                Name    = dependentPackage.Name,
                                Version = dependentPackage.Version
                            });
                        }
                    }
                }
            }

            return(dependencies);
        }