J'essaie de trouver tous les types dont dépend un type donné, y compris les interfaces, les classes abstraites, les énumérations, les structures, etc. Je veux charger un assemblage, et imprimer une liste de tous les types définis dedans et leurs dépendances. Jusqu'à présent, j'ai pu trouver tous les types externes d'un ensemble CLR dépend de l'utilisation Mono.Cecil, par exemple.Comment puis-je trouver toutes les dépendances de type d'un type donné dans un assemblage de langage basé sur CLR?
using System;
using Mono.Cecil;
using System.IO;
FileInfo f = new FileInfo("SomeAssembly.dll");
AssemblyDefinition assemDef = AssemblyFactory.GetAssembly (f.FullName);
List<TypeReference> trList = new List<TypeReference>();
foreach(TypeReference tr in assemblyDef.MainModule.TypeReferences){
trList.Add(tr.FullName);
}
Cette liste peut également être obtenue en utilisant le disasembler mono, par exemple "monodis SomeAssembly.dll --typeref", mais cette liste ne marche pas semblent inclure des primitives, par exemple System.Void, System.Int32, etc
Je dois traiter chaque type individuellement, et obtenir tous les types dont un type donné dépend, même si les types sont définis dans le même assemblage. Est-il possible de faire cela en utilisant Mono.Cecil ou un autre projet? Je sais que cela peut être fait en chargeant l'ensemble, puis en itérant sur chaque type défini, puis en chargeant l'IL du type et en le scannant pour des références, mais je suis sûr qu'il y a un meilleur moyen. Idéalement, il fonctionnera également avec des classes internes anonymes.
Cela devrait également fonctionner si plusieurs modules sont définis dans le même assemblage.
Merci Oisin, je sais NDepend, il est un excellent produit. J'essaie de générer une liste de types dépendants afin que je puisse l'utiliser dans un autre outil. NDepend n'est donc pas l'outil dont j'ai besoin. –