133 votes

Comment déterminer les dépendances d'une application .NET ?

Comment déterminer les dépendances d'une application .NET ? Est-ce que Dépendance Walker fonctionne-t-il avec les applications gérées ? J'ai téléchargé la dernière version et j'ai essayé de profiler l'application, mais elle s'arrête sans grande explication. S'il ne fonctionne pas avec .NET, existe-t-il un autre outil qui pourrait m'aider à déboguer un problème de chargement de DLL au moment de l'exécution ?

107voto

Orion Edwards Points 54939

Le marcheur de dépendances fonctionne sur les binaires win32 normaux. Toutes les dll et tous les exe .NET ont une petite partie d'en-tête qui les fait ressembler à des binaires normaux, mais tout ce qu'ils disent, c'est "charger le CLR" - c'est donc tout ce que le marcheur de dépendances vous dira.

Pour savoir sur quels éléments votre application .NET s'appuie réellement, vous pouvez utiliser l'excellent outil suivant Réflecteur .NET de Red Gate. (EDIT : Notez que .NET Reflector est maintenant un produit payant. ILSpy est gratuit et open source et très similaire).

Chargez votre DLL dans le logiciel, faites un clic droit et choisissez 'Analyze' - vous verrez alors un élément 'Depends On' qui vous montrera toutes les autres DLL (et les méthodes dans ces DLL) dont elle a besoin.

Cependant, les choses peuvent parfois se compliquer lorsque votre application dépend de la dll X et que celle-ci est présente, mais que, pour une raison quelconque, elle ne peut être chargée ou localisée au moment de l'exécution.

Pour résoudre ce genre de problèmes, Microsoft dispose d'une Visualiseur de journaux de liaison d'assemblage qui peut vous montrer ce qui se passe au moment de l'exécution

0 votes

Je pense que vous avez manqué un peu de cette URL - le .aspx a été mis dans le texte du lien. J'ai réussi à la trouver.

0 votes

Oh... oui le contrôle markdown mange les parenthèses dans les URL, et malheureusement MSDN met (VS80) dans toutes ses url :-(

47 votes

Notez que depuis début 2011, .NET Reflector n'est plus gratuit. Le projet open source ILSpy est très similaire.

27voto

Jim Points 111

Ouvrez le fichier d'assemblage dans ILDASM et regardez l'externalité .assembly dans le MANIFEST.

1 votes

Puis-je voir la version des assemblages dépendants de cette façon également ? Je ne vois que le nom de la dépendance, pas sa version.

0 votes

En fait, oui, je peux aussi voir la version des assemblages dépendants de cette façon, en cliquant sur "M A N I F E S T".

1 votes

Je préfère celui-ci - vous n'avez pas besoin de télécharger des utilitaires supplémentaires si vous travaillez dans un environnement de développement.

19voto

Pour parcourir les dépendances du code .NET, vous pouvez utiliser les capacités de l'outil NDepend. L'outil propose :

Par exemple, une telle requête peut ressembler à ceci :

from m in Methods 
let depth = m.DepthOfIsUsing("NHibernate.NHibernateUtil.Entity(Type)") 
where depth  >= 0 && m.IsUsing("System.IDisposable")
orderby depth
select new { m, depth }

Et son résultat ressemble à : (remarquez le code métrique profondeur 1 est pour les appelants directs, 2 pour les appelants des appelants directs...) (remarquez également le bouton Exporter vers le graphique pour exporter le résultat de la requête vers un fichier de type Graphique d'appel )

NDepend dependencies browsing through C# LINQ query

Le graphique de dépendance ressemble à ceci :

NDepend Dependency Graph

La matrice de dépendance se présente comme suit :

NDepend Dependency Matrix

La matrice de dépendance est de-facto moins intuitif que le graphique, mais il est plus adapté pour parcourir des sections complexes de code comme :

NDepend Matrix vs Graph

Clause de non-responsabilité : je travaille pour NDepend

3 votes

Patrick aurait probablement dû mentionner qu'il est l'auteur de ce fantastique outil ;). Il vaut vraiment la peine d'être consulté. +1 pour l'avoir écrit !

1 votes

Hé, je viens de le remarquer moi-même. J'aime lire les articles de son blog. Je vais devoir essayer NDepend !

3 votes

@MitchWheat -- le nom correspond haha, "Patrick de l'équipe NDepend".

5voto

Ramesh Points 6909

Activez la journalisation des liaisons d'assemblage en définissant la valeur de registre EnableLog dans HKLM. \Software\Microsoft\Fusion à 1. Notez que vous devez redémarrer votre application (utilisez iisreset) pour que les changements aient un effet.

Conseil : N'oubliez pas de désactiver la journalisation de la fusion lorsque vous avez terminé, car l'activation de cette fonction pénalise les performances.

0voto

Richard Morgan Points 4048

Un autre complément pratique de Reflector que j'utilise est le Matrice de la structure des dépendances . C'est vraiment génial de voir quelles classes utilisent quoi. En plus, c'est gratuit.

0 votes

Il n'affiche pas les numéros de version, malheureusement, du moins pas la version qui s'installe en tant que complément de Visual Studio.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X