code

너겟 패키지 종속성 계층보기

codestyles 2021. 1. 8. 08:14
반응형

너겟 패키지 종속성 계층보기


너겟 패키지 간의 종속성 계층을 볼 수있는 방법이 텍스트 또는 그래픽으로 있습니까?


@ neil-barnwell 솔루션과 비슷하지만 NuGet.Core 2.7 이상에서 작동합니다.

Install-Package NuGet.Core

다음은 코드입니다.

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

.NET에서 API에 대한 코드를 작성할 수도 있습니다 NuGet.Core. 너겟을 통해 설치하십시오.

install-package nuget.core

그런 다음 저장소 개체를 가져 와서 그래프를 살펴볼 수 있습니다. 방금 빌드 한 샘플 앱은 다음과 같습니다.

using System;
using System.Collections.Generic;
using System.Linq;
using NuGet;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main()
        {    
            var repo = new LocalPackageRepository(@"C:\Code\Common\Group\Business-Logic\packages");
            IQueryable<IPackage> packages = repo.GetPackages();
            OutputGraph(repo, packages, 0);
        }

        static void OutputGraph(LocalPackageRepository repository, IEnumerable<IPackage> packages, int depth)
        {
            foreach (IPackage package in packages)
            {
                Console.WriteLine("{0}{1} v{2}", new string(' ', depth), package.Id, package.Version);

                IList<IPackage> dependentPackages = new List<IPackage>();
                foreach (var dependency in package.Dependencies)
                {
                    dependentPackages.Add(repository.FindPackage(dependency.Id, dependency.VersionSpec.ToString()));
                }

                OutputGraph(repository, dependentPackages, depth += 3);
            }
        }
    }
}

제 경우에는이 앱이 다음과 같이 출력합니다.

MyCompany.Castle v1.1.0.3
   Castle.Windsor v2.5.3
      Castle.Core v2.5.2
      MyCompany.Common v1.1.0.6
         CommonServiceLocator v1.0
            MyCompany.Enum v1.1.0.7
   MyCompany.Common v1.1.0.6
      CommonServiceLocator v1.0
         MyCompany.Enum v1.1.0.7
      MyCompany.Enum v1.1.0.7
         MyCompany.Versioning v1.3
            Castle.Core v2.5.2
               Castle.Windsor v2.5.3
                  Castle.Core v2.5.2
                  CommonServiceLocator v1.0
                     NUnit v2.5.10.11092
                        RhinoMocks v3.6

콘솔에 종속성 트리를 인쇄 하는 멋진 NPM 패키지찾았습니다 . 물론 NPM / Node.JS를 사용 / 설치해도 상관 없습니다.

다른 솔루션을 고려할 때 가장 간단한 방법이며, 직접 코드를 작성하거나 무언가를 등록 할 필요가 없으며 예상 한대로 종속성 트리를 얻을 수 있습니다. 그러나 packages.config형식으로 만 작동 합니다.

무료 Visual Studio 버전이나 nuget.exe에도이 기능이 없다는 것을 믿을 수 없습니다.


NuGet 1.4에서 시각화 된 패키지가 작동해야합니다. 참조 http://docs.nuget.org/docs/release-notes/nuget-1.4를


I Can Has .NET Core ( GitHub 리포지토리 )는 Graphviz 표현 과 함께 NuGet 종속성의 멋진 그래프를 생성합니다 . 이름에서 알 수 있듯이 .NET Core 호환성 정보도 무료로 얻을 수 있습니다.

컴퓨터에서 로컬로 실행하려는 경우 I Can Has .NET Core콘솔 모드를 제공 합니다.

NuGet 종속성 그래프 샘플 (웹)

NuGet 종속성 그래프 샘플 (Graphviz)


최신 버전의 nuget-core와 호환되는 솔루션을 추가합니다.

install-package nuget.core

종속성 그래프를 가져 오는 콘솔 앱입니다.

    class Program
    {
        static void Main()
        {
            Console.Write("Enter the local repo folder: ");
            var repoFolder = Console.ReadLine();

            var repo = new LocalPackageRepository(repoFolder);
            IQueryable<IPackage> packages = repo.GetPackages();
            OutputGraph(repo, packages, 0);
        }

        static void OutputGraph(LocalPackageRepository repository, IEnumerable<IPackage> packages, int depth)
        {
            foreach (IPackage package in packages)
            {
                Console.WriteLine("{0}{1} v{2}", new string(' ', depth), package.Id, package.Version);

                IList<IPackage> dependentPackages = new List<IPackage>();
                foreach (var dependencySet in package.DependencySets)
                {
                    foreach (var dependency in dependencySet.Dependencies)
                    {
                        var dependentPackage = repository.FindPackage(dependency.Id, dependency.VersionSpec, true, true);
                        if (dependentPackage != null)
                        {
                            dependentPackages.Add(dependentPackage);
                        }
                    }       
                }

                OutputGraph(repository, dependentPackages, depth += 3);
            }
        }
    }

참고로 MyGet.org 에는 이러한 종류의 시각화가 기본 제공됩니다. 피드 세부 정보 페이지에서 종속성 그래프를 볼 수 있습니다.


https://github.com/mikehadlow/AsmSpy를 사용하여 프로젝트 전체에서 어셈블리 버전 식별


이것은 오래된 질문이므로 다음 사항에 유의하는 것이 중요합니다.

이것은 새로운 csproj 형식의 기본 제공 기능입니다. VS 2017을 사용하는 경우

Solution Explorer->{Your project}->Dependencies->NuGet

각 NuGet 종속성 트리를 열고 재귀 적으로 실행할 수 있으며, 특정 패키지의 종속성 트리뿐만 아니라 프로젝트에서 실제로 설치하는 NuGet 패키지도 효과적으로 확인할 수 있습니다.

참조 URL : https://stackoverflow.com/questions/6653715/view-nuget-package-dependency-hierarchy

반응형