2009-10-21 4 views
4

Nous avons une application C# qui utilise un certain nombre de bibliothèques (que nous avons écrit aussi). L'application dépend des différentes bibliothèques et certaines bibliothèques dépendent de certaines autres bibliothèques.Trouver les dépendances d'une classe dans C#

Maintenant, quand il s'agit de tester l'application, nous devons également nous assurer que les bibliothèques fonctionnent correctement. Le problème est que l'application utilise seulement une petite quantité de la fonctionnalité de ces bibliothèques. Je peux utiliser quelque chose comme NCover pour trouver quelles classes de bibliothèques sont réellement utilisées mais j'aimerais aussi savoir comment ces classes (à travers l'application et les différentes bibliothèques) sont organisées - leur structure de dépendance.

Donc, ma question: Je veux être en mesure d'exécuter mon application et ensuite obtenir la liste des classes utilisées, organisées par dépendances (c'est-à-dire ce qui appelle/utilise quoi).

Est-ce que quelqu'un connaît un outil (gratuit ou non) qui vous permet de faire cela? Le code est tout dans VS2008 organisé avec les différentes libs/app en tant que projets.

Répondre

2

Je pense que vous voulez regarder:

Reflector

du logiciel Red Gate. C'est gratuit, et c'est probablement le meilleur outil de désassemblage/débogage pour .NET. Il possède également une architecture de plug-in et une page Codeplex .NET Reflector AddIns qui contient un certain nombre de compléments très utiles.

Pour regarder les dépendances, je pense que le plug-in Graph devrait vous donner envie que vous recherchiez.

Il y a aussi un très similaire (et très bon outil) sur SourceForge appelé Refractor qui montrera aussi des graphes de dépendances.

+0

merci! Reflector me permet de parcourir les dépendances comme je le voulais - en utilisant la partie Depends On de l'analyseur. Le graphique ne dessine pas vraiment ce que je voulais. Quand j'ai plus de temps, je pourrais envisager de faire un plug-in. J'apprécie l'aide! –

2

NDepend analyse les fichiers DLL et affiche un graphique avec des dépendances entre les classes, c'est un excellent outil d'analyse de code (mais pas gratuit). Ils ont une édition d'essai que vous pouvez utiliser pendant quelques mois afin que vous puissiez l'essayer.

+0

Merci pour la suggestion. J'ai regardé NDepend et, bien qu'il m'ait donné un tas de visualisations intéressantes, il n'a pas vraiment répondu à ma question sous-jacente: Si je veux tester la classe X, quelles autres classes dois-je tester (et dans quel ordre). Cela peut être en partie dû au fait que l'édition d'essai est un peu limitée mais je ne vais pas acheter quelque chose qui pourrait fonctionner. –

+0

Je crois qu'il ne montre en effet pas un graphique de cela. Le procès n'est pas limité, donc ce n'est clairement pas le bon outil pour vous, désolé à ce sujet! –

0

Vous pouvez essayer la version RC de Visual Studio 2010 Ultimate pour générer des graphiques de dépendance pour le code .NET. Vous pouvez générer un graphique de tous vos assemblys, espaces de noms, classes ou une combinaison de ceux-ci, ou vous pouvez utiliser Architecture Explorer pour sélectionner des artefacts spécifiques et les relations que vous souhaitez visualiser:

Comment: générer des documents graphiques du code: http://msdn.microsoft.com/en-us/library/dd409453%28VS.100%29.aspx#SeeSpecificSource

Vous pouvez utiliser Visual studio Ultimate pour explorer les relations et l'organisation dans le code existant par générant des documents de graphe orienté. Ces graphiques représentent les éléments de code et leurs relations sous la forme d'un ensemble de nœuds connectés par des liens ou des arêtes. Vous pouvez utiliser ces graphiques pour vous aider à visualiser, explorer et analyser le code.

Comment: Indicatifs Utilisation de l'architecture Explorateur: http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx

Vous pouvez sélectionner des sections verticales ou "tranches" de code que vous souhaitez visualiser en utilisant l'architecture Explorer.Vous pouvez explorer le code source dans une solution Visual Studio ou du code managé compilé dans des fichiers .dll ou des fichiers .exe. Vous pouvez utiliser Architecture Explorer pour parcourir les autres domaines en installant des fournisseurs supplémentaires. Lorsque vous trouvez le code que vous souhaitez visualiser, vous pouvez générer des graphiques pour explorer les relations dans ce code.

RC télécharger: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=457bab91-5eb2-4b36-b0f4-d6f34683c62a.

Visual Studio 2010 Découverte d'architecture & Outils de modélisation forum: http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads

4

Pour compléter la réponse de Gergely sur NDepend, cet outil peut aider à ce que cela de manière intelligente . Disclaimer: Je suis l'un des développeurs de l'outil

Pour obtenir ce que vous demandez, vous devez écrire un . Par exemple, nous avons écrit une telle requête, d'un côté nous avons NDepend assemblées, qui appellent DevExpress assemblées. La requête de code CQLinq ci-dessous correspond DevExpress types publics utilisés par NDepend, mais aussi itérativement, il correspond interne DevExpress types utilisés.

let devExpressTypes = Assemblies.WithNameLike("DevExpress").ChildTypes() 
let ndependTypes = Assemblies.WithNameLike("NDepend").ChildTypes() 
let publicDevExpressTypesUsed = devExpressTypes.UsedByAny(ndependTypes) 
let devExpressTypesUsedRec = publicDevExpressTypesUsed .FillIterative(
    types=> devExpressTypes.UsedByAny(types)) 

from t in devExpressTypesUsedRec.DefinitionDomain 
select new { t, 
    depth = devExpressTypesUsedRec[t], 
    ndependTypesUsingMe = t.TypesUsingMe.Intersect(ndependTypes) 
} 

Ensuite, vous pouvez exporter une partie du résultat à la NDepend dependency graph.

(avis dans la capture d'écran ci-dessous la profondeur des types DevExpress Une profondeur de zéro indique que le type DevExpress public est directement appelé par type NDepend: pour les types DevExpress, les types NDepend sont listés directement en utilisant une profondeur de 1 signifie que le type DevExpress est utilisé par un type directement utilisé par un type NDepend, et ainsi de suite ...)

Export matched types to the dependency graph

... et obtenir graphique d'utilisation du type que vous demandez:

Types usage graph

Questions connexes