Existe-t-il un moyen, textuel ou graphique, de visualiser la hiérarchie des dépendances entre les paquets NuGet ?
Réponses
Trop de publicités?Comme la solution de @neil-barnwell, mais elle fonctionne avec NuGet.Core 2.7+.
Install-Package NuGet.Core
Voici le 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);
}
}
}
Il est également possible d'écrire du code contre l'API en NuGet.Core
. Installez-le via NuGet :
install-package nuget.core
Ensuite, vous pouvez obtenir un objet de référentiel et parcourir le graphe. Voici un exemple d'application que je viens de construire :
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);
}
}
}
}
Dans mon cas, cette application produit quelque chose comme ceci :
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
J'ai trouvé une belle Paquet NPM pour imprimer l'arbre de dépendance dans la console. Bien sûr, si cela ne vous dérange pas d'utiliser/installer NPM/Node.JS.
Si l'on considère les autres solutions, celle-ci est la plus simple, vous n'avez pas besoin d'écrire votre propre code ou d'enregistrer quelque chose, et vous obtenez l'arbre de dépendances que vous attendez. Mais elle ne fonctionne qu'avec packages.config
formato.
Je ne peux pas croire que cette fonctionnalité soit absente des éditions gratuites de Visual Studio ou de nuget.exe également.
Je peux avoir .NET Core ( Dépôt GitHub ) produit de jolis graphiques des dépendances NuGet ainsi qu'un fichier Graphviz représentation. Et comme son nom l'indique, vous obtenez aussi gratuitement des informations sur la compatibilité avec .NET Core.
Si vous préférez l'exécuter localement sur votre ordinateur, Je peux avoir .NET Core propose également un console mode.
- Réponses précédentes
- Plus de réponses