如何在Visual Studio 2015中获取NuGet包依赖关系报告?

时间:2016-12-14 00:05:02

标签: visual-studio nuget

我在VS2015中的控制台应用程序中只添加了两个NuGet包,由于存在一系列依赖关系,我最终将44个包添加到了我的项目中。我可以在下面列出的var app = express(); var http = require('http').Server(app); var io = require('socket.io')(http); io.on('connection', function(socket){ socket.on('someEndpoint', function(message){ socket.emit('someClientEndPoint', 'You sent a message to someEndpoint'); }); }); 文件中看到它们。

添加到我项目中的软件包列表似乎失控了!

有没有办法获得添加到packages.config的NuGet包的基本依赖关系层次结构列表或报告?

packages.config

1 个答案:

答案 0 :(得分:1)

安装软件包时,会弹出一个预览窗口,列出将使用此软件包安装的依赖项。

例如,如果我想安装Microsoft.Azure.Common软件包,单击“安装”按钮时,将弹出以下窗口,告诉我将安装哪些依赖项。 enter image description here

但是如果你想知道这些依赖关系之间的依赖关系层次结构,请尝试运行以下代码来输出依赖关系层次结构。请在编写以下代码之前安装NuGet.Core包。

请参阅:https://gist.github.com/panicoenlaxbox/894a904afabf90ecdd6f

using NuGet;
using System.Runtime.Versioning;

   static void Main(string[] args)
    {
        var frameworkName = new FrameworkName(".NETFramework, Version=4.5");
        var repository = PackageRepositoryFactory.Default.CreateRepository(@"D:\Visual Studio 2015 Project\CAT Case Sample\ApplicationInsights\packages");
        var packages =
            repository.GetPackages().Where(
                p => p.GetFullName().ToLower().Contains("azure") || p.GetCompatiblePackageDependencies(frameworkName).Any(t => repository.ResolveDependency(t, false, true).GetFullName().ToLower().Contains("azure")));
        foreach (IPackage package in packages)
        {
            PrintPackageInformation(repository, frameworkName, package, 0);
        }
        Console.ReadLine();

    }

    private static void PrintPackageInformation(IPackageRepository repository, FrameworkName frameworkName, IPackage package, int level)
    {
        Console.WriteLine("{0}{1}", new string(' ', level * 3), package);
        foreach (PackageDependency dependency in package.GetCompatiblePackageDependencies(frameworkName))
        {
            IPackage subPackage = repository.ResolveDependency(dependency, false, true);
            PrintPackageInformation(repository, frameworkName, subPackage, level + 1);
        }
    }