View NuGet package dependency hierarchy

后端 未结 10 1289
遇见更好的自我
遇见更好的自我 2020-12-07 16:24

Is there a way, either textual or graphical, to view the hierarchy of dependencies between NuGet packages?

10条回答
  •  有刺的猬
    2020-12-07 17:06

    Like @neil-barnwell solution, but works with NuGet.Core 2.7+

    Install-Package NuGet.Core
    

    Here is the code

    using System;
    using System.Linq;
    using System.Runtime.Versioning;
    using System.IO;
    using NuGet;
    
    public class Program
    {
        public static void Main(string[] args)
        {
            var frameworkName = new FrameworkName(".NETFramework, Version=4.0");
    
            // var packageSource = "https://www.nuget.org/api/v2/";
            var packageSource = Path.Combine(Environment.GetEnvironmentVariable("LocalAppData"), "NuGet", "Cache");
    
            var repository = PackageRepositoryFactory.Default.CreateRepository(packageSource);
            const bool prerelease = false;
    
            var packages = repository.GetPackages()
                .Where(p => prerelease ? p.IsAbsoluteLatestVersion : p.IsLatestVersion)
                .Where(p => VersionUtility.IsCompatible(frameworkName, p.GetSupportedFrameworks()));
    
            foreach (IPackage package in packages)
            {
                GetValue(repository, frameworkName, package, prerelease, 0);
            }
    
            Console.WriteLine();
            Console.WriteLine("Press Enter...");
            Console.ReadLine();
        }
    
        private static void GetValue(IPackageRepository repository, FrameworkName frameworkName, IPackage package, bool prerelease, int level)
        {
    
            Console.WriteLine("{0}{1}", new string(' ', level * 3), package);
            foreach (PackageDependency dependency in package.GetCompatiblePackageDependencies(frameworkName))
            {
                IPackage subPackage = repository.ResolveDependency(dependency, prerelease, true);
                GetValue(repository, frameworkName, subPackage, prerelease, level + 1);
            }
        }
    }
    

提交回复
热议问题