Gia*_*rdi 25
像@ neil-barnwell解决方案,但与NuGet.Core 2.7+一起使用
Install-Package NuGet.Core
Run Code Online (Sandbox Code Playgroud)
这是代码
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Nei*_*ell 19
也可以在API中编写代码NuGet.Core.通过nuget安装:
install-package nuget.core
Run Code Online (Sandbox Code Playgroud)
然后,您可以获取存储库对象并遍历图形.这是我刚刚构建的示例应用程序:
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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的情况下,这个应用程序输出如下:
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
Run Code Online (Sandbox Code Playgroud)
Joh*_*n_J 17
如果您使用 new .csproj,您可以在此处获取所有引用的依赖项(在项目构建后):
{ProjectDir}\obj\project.assets.json
N. *_*sev 11
我找到了一个很好的NPM包来将依赖树打印到控制台中.当然,如果您不介意使用/安装NPM/Node.JS.
考虑到其他解决方案,这是最简单的解决方案,您不需要编写自己的代码或注册某些东西,并且您可以获得所期望的依赖树.但它只适用于packages.config格式.
我无法相信这个功能在免费的Visual Studio版本或nuget.exe中也不存在.
从NuGet 1.4可视化的包应该工作.见http://docs.nuget.org/docs/release-notes/nuget-1.4
小智 7
我添加了与最新版本的 nuget-core 兼容的解决方案
install-package nuget.core
Run Code Online (Sandbox Code Playgroud)
这是获取依赖关系图的控制台应用程序
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以拥有.NET Core(GitHub存储库)生成漂亮的NuGet依赖关系图以及Graphviz表示形式。顾名思义,您还可以免费获得.NET Core兼容性信息。
如果您希望在计算机上本地运行它,我可以拥有.NET Core还提供了控制台模式。
由于这是一个老问题,因此请务必注意以下几点:
这是新的 csproj 格式的内置功能。在 Visual Studio 2017 及更高版本中,打开解决方案资源管理器,您可以找到如下包:
{Your project}->Dependencies->Packages
Run Code Online (Sandbox Code Playgroud)
您可以打开每个 NuGet 依赖树并递归运行它,不仅可以有效地查看特定包的依赖树,还可以查看您的项目实际安装了哪些 NuGet 包。
| 归档时间: |
|
| 查看次数: |
21233 次 |
| 最近记录: |