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