public bool IsTransitivelyAvailable(string packageName) => TargetFrameworks.Any(tfm => ContainsDependency(tfm, d => string.Equals(packageName, d.Id, StringComparison.OrdinalIgnoreCase)));
/// <nodoc /> private bool TryParseDependenciesFromNuSpec(XDocument nuSpec) { var dependencyNodes = nuSpec .Elements() .Where(el => string.Equals(el.Name.LocalName, "package", StringComparison.Ordinal)) .Elements() .Where(el => string.Equals(el.Name.LocalName, "metadata", StringComparison.Ordinal)) .Elements() .Where(el => string.Equals(el.Name.LocalName, "dependencies", StringComparison.Ordinal)) .Elements(); // Namespace independent query, nuget has about 6 different namespaces as of may 2016. var skipIdLookupTable = new HashSet <string>(DependentPackageIdsToSkip); var ignoreIdLookupTable = new HashSet <string>(DependentPackageIdsToIgnore); bool skipAllDependencies = skipIdLookupTable.Contains("*"); bool ignoreAllDependencies = ignoreIdLookupTable.Contains("*"); foreach (var dependency in dependencyNodes.Where(el => string.Equals(el.Name.LocalName, "dependency", StringComparison.Ordinal))) { var genericDependency = ReadDependencyElement(dependency); if (genericDependency == null && !(ignoreAllDependencies || ignoreIdLookupTable.Contains(dependency.Attribute("id")?.Value?.Trim()))) { return(false); } if (genericDependency != null && !skipAllDependencies && !skipIdLookupTable.Contains(genericDependency.GetPackageIdentity())) { m_dependencies.Add(genericDependency); } } var groups = dependencyNodes.Where(el => string.Equals(el.Name.LocalName, "group", StringComparison.Ordinal)); foreach (var group in groups) { if (group.Attribute("targetFramework") != null && NugetFrameworkMonikers.TargetFrameworkNameToMoniker.TryGetValue(group.Attribute("targetFramework").Value, out Moniker targetFramework)) { if (group.Elements().Any()) { // If there is at least one valid dependency for a known framework, then the package is defined as managed IsManagedPackage = true; // Only add the group dependency target framework if the nuget package itself also contains specific assemblies of the same version if (!TargetFrameworks.Contains(targetFramework) && (References.Keys.Any(tfm => tfm.Moniker == targetFramework) || Libraries.Keys.Any(tfm => tfm.Moniker == targetFramework))) { TargetFrameworks.Add(targetFramework); } // If the package has a pinned tfm and the groups tfm does not match, skip the groups dependency resolution if (!string.IsNullOrEmpty(this.Tfm) && NugetFrameworkMonikers.TargetFrameworkNameToMoniker.TryGetValue(this.Tfm, out Moniker pinnedTfm) && !PathAtom.Equals(pinnedTfm, targetFramework)) { continue; } foreach ( var dependency in group.Elements().Where( el => string.Equals(el.Name.LocalName, "dependency", StringComparison.Ordinal))) { var grouppedDependency = ReadDependencyElement(dependency); if (grouppedDependency == null && !(ignoreAllDependencies || ignoreIdLookupTable.Contains(dependency.Attribute("id")?.Value?.Trim()))) { return(false); } if (grouppedDependency != null && !skipAllDependencies && !skipIdLookupTable.Contains(grouppedDependency.GetPackageIdentity())) { DependenciesPerFramework.Add(targetFramework, grouppedDependency); } } } } } IsNetStandardPackageOnly = !TargetFrameworks.Any(tfm => NugetFrameworkMonikers.FullFrameworkVersionHistory.Contains(tfm)) && !TargetFrameworks.Any(tfm => NugetFrameworkMonikers.NetCoreAppVersionHistory.Contains(tfm)); return(true); }
public bool IsTransitiveDependency(NuGetReference nugetReference) => TargetFrameworks.Any(tfm => ContainsDependency(tfm, d => ReferenceSatisfiesDependency(d, nugetReference, true)));