handle single project target
This commit is contained in:
@@ -82,45 +82,46 @@ public static class ProjectEvaluation
|
|||||||
var packages = new List<InstalledPackage>();
|
var packages = new List<InstalledPackage>();
|
||||||
var dependencyMap = NugetDependencyGraph.GetPackageDependencyMap(assetsFile);
|
var dependencyMap = NugetDependencyGraph.GetPackageDependencyMap(assetsFile);
|
||||||
|
|
||||||
foreach (var target in assetsFile.Targets.Where(t => t.RuntimeIdentifier == null))
|
// We currently do not handle multi-targeted projects
|
||||||
|
var target = assetsFile.Targets.SingleOrDefault(t => t.RuntimeIdentifier == null);
|
||||||
|
if (target == null) return packages;
|
||||||
|
|
||||||
|
var tfm = target.TargetFramework.GetShortFolderName();
|
||||||
|
var tfmInfo = assetsFile.PackageSpec.TargetFrameworks
|
||||||
|
.FirstOrDefault(t => t.FrameworkName.Equals(target.TargetFramework));
|
||||||
|
|
||||||
|
if (tfmInfo == null) return packages;
|
||||||
|
|
||||||
|
var topLevelDependencies = tfmInfo.Dependencies
|
||||||
|
.DistinctBy(s => s.Name)
|
||||||
|
.Select(s => s.Name)
|
||||||
|
.ToHashSet();
|
||||||
|
|
||||||
|
foreach (var lockFileTargetLibrary in target.Libraries.Where(l => l.Type == "package"))
|
||||||
{
|
{
|
||||||
var tfm = target.TargetFramework.GetShortFolderName();
|
var isTopLevel = topLevelDependencies.Contains(lockFileTargetLibrary.Name);
|
||||||
var tfmInfo = assetsFile.PackageSpec.TargetFrameworks
|
if (!includeTransitive && !isTopLevel) continue;
|
||||||
.FirstOrDefault(t => t.FrameworkName.Equals(target.TargetFramework));
|
|
||||||
|
|
||||||
if (tfmInfo == null) continue;
|
var dependency = tfmInfo.Dependencies
|
||||||
|
.FirstOrDefault(d => d.Name.Equals(lockFileTargetLibrary.Name, StringComparison.OrdinalIgnoreCase));
|
||||||
|
|
||||||
var topLevelDependencies = tfmInfo.Dependencies
|
var dependents = dependencyMap.GetValueOrDefault(lockFileTargetLibrary.Name, []);
|
||||||
.DistinctBy(s => s.Name)
|
var mappedDependents = dependents.Select(d => new DependentPackage
|
||||||
.Select(s => s.Name)
|
|
||||||
.ToHashSet();
|
|
||||||
|
|
||||||
foreach (var lockFileTargetLibrary in target.Libraries.Where(l => l.Type == "package"))
|
|
||||||
{
|
{
|
||||||
var isTopLevel = topLevelDependencies.Contains(lockFileTargetLibrary.Name);
|
PackageName = d.PackageName,
|
||||||
if (!includeTransitive && !isTopLevel) continue;
|
RequestedVersion = d.PackageDependency.VersionRange
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
var dependency = tfmInfo.Dependencies
|
packages.Add(new InstalledPackage
|
||||||
.FirstOrDefault(d => d.Name.Equals(lockFileTargetLibrary.Name, StringComparison.OrdinalIgnoreCase));
|
{
|
||||||
|
Name = lockFileTargetLibrary.Name,
|
||||||
var dependents = dependencyMap.GetValueOrDefault(lockFileTargetLibrary.Name, []);
|
RequestedVersion = dependency?.LibraryRange.VersionRange?.ToString() ?? "",
|
||||||
var mappedDependents = dependents.Select(d => new DependentPackage
|
ResolvedVersion = lockFileTargetLibrary.Version?.ToString(),
|
||||||
{
|
TargetFramework = tfm,
|
||||||
PackageName = d.PackageName,
|
IsTopLevel = isTopLevel,
|
||||||
RequestedVersion = d.PackageDependency.VersionRange
|
IsAutoReferenced = dependency?.AutoReferenced ?? false,
|
||||||
}).ToList();
|
DependentPackages = mappedDependents
|
||||||
|
});
|
||||||
packages.Add(new InstalledPackage
|
|
||||||
{
|
|
||||||
Name = lockFileTargetLibrary.Name,
|
|
||||||
RequestedVersion = dependency?.LibraryRange.VersionRange?.ToString() ?? "",
|
|
||||||
ResolvedVersion = lockFileTargetLibrary.Version?.ToString(),
|
|
||||||
TargetFramework = tfm,
|
|
||||||
IsTopLevel = isTopLevel,
|
|
||||||
IsAutoReferenced = dependency?.AutoReferenced ?? false,
|
|
||||||
DependentPackages = mappedDependents
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return packages;
|
return packages;
|
||||||
|
|||||||
Reference in New Issue
Block a user