Graphique de dépendance des projets Visual Studio


130

Je suis actuellement en train de migrer une grande solution (~ 70 projets) de VS 2005 + .NET 2.0 vers VS 2008 + .NET 3.5. Actuellement, j'ai VS 2008 + .NET 2.0.

Le problème est que je dois déplacer les projets un par un vers le nouveau framework .NET en veillant à ce qu'aucun projet .NET 2.0 ne fasse référence au projet .NET 3.5. Existe-t-il un outil qui me donnerait un joli graphique des dépendances du projet?

Réponses:


39

Avez-vous essayé NDepend? Il vous montrera les dépendances et vous pourrez également analyser la convivialité de vos classes et méthodes.

Leur site Web:

http://ndepend.com


Pour compléter la réponse @Eriawan en avril 2020, la version 2020.1 de NDepend a été publiée avec Dependency Graph complètement reconstruit. Il évolue désormais sur de grandes solutions constituées de centaines de projets et offre de nombreuses possibilités de navigation.

Voici à quoi cela ressemble sur le projet NopCommerce OSS .

Graphique de dépendance NDepend sur NopCommerce

Voici à quoi cela ressemble sur toute la bibliothèque de classes .NET Core 3 (176 assemblys).

entrez la description du lien ici

Avertissement: je travaille chez NDepend


4
l'affiche originale n'a pas dit que ndepend était gratuit et cela résout le problème.
krystan honour le

6
Il était peut-être gratuit au moment de la rédaction de cette réponse, mais maintenant ce n'est pas le cas.
Levente Koncz le

@ patrick-from-ndepend-team veuillez ne pas modifier directement ma réponse et ouvrir une nouvelle réponse à la place.
Eriawan Kusumawardhono le

Ok @EriawanKusumawardhono désolé si c'est un problème pour vous. De cette façon, les lecteurs obtiennent plus de détails et cela améliore l'utilité de la réponse, voulez-vous que je supprime les détails supplémentaires et les captures d'écran?
Patrick de l'équipe NDepend le

@PatrickfromNDependteam les détails supplémentaires et les captures d'écran sont OK. mais comme c'est à l'origine ma réponse, il semble que votre modification me donne l'impression que je travaille chez NDepend. S'il vous plaît ajouter une nouvelle réponse avec votre modification, et également souligner que votre nouvelle réponse est un ajout à ma réponse. Merci avant :)
Eriawan Kusumawardhono

170

J'avais besoin de quelque chose de similaire, mais je ne voulais pas payer (ou installer) un outil pour le faire. J'ai créé un script PowerShell rapide qui parcourt les références du projet et les recrache dans un format convivial yuml.me à la place:

Function Get-ProjectReferences ($rootFolder)
{
    $projectFiles = Get-ChildItem $rootFolder -Filter *.csproj -Recurse
    $ns = @{ defaultNamespace = "http://schemas.microsoft.com/developer/msbuild/2003" }

    $projectFiles | ForEach-Object {
        $projectFile = $_ | Select-Object -ExpandProperty FullName
        $projectName = $_ | Select-Object -ExpandProperty BaseName
        $projectXml = [xml](Get-Content $projectFile)

        $projectReferences = $projectXml | Select-Xml '//defaultNamespace:ProjectReference/defaultNamespace:Name' -Namespace $ns | Select-Object -ExpandProperty Node | Select-Object -ExpandProperty "#text"

        $projectReferences | ForEach-Object {
            "[" + $projectName + "] -> [" + $_ + "]"
        }
    }
}

Get-ProjectReferences "C:\Users\DanTup\Documents\MyProject" | Out-File "C:\Users\DanTup\Documents\MyProject\References.txt"

4
impressionnant. Je l'ai pris et je l'ai étendu pour parcourir tous les sous-projets, puis je l'ai étendu à nouveau pour prendre un fichier sln à la place pour mapper l'ensemble du projet. Merci
Jon

Avec quelles versions de Visual Studio cela fonctionne-t-il? De plus, pour visualiser des projets C ++ au lieu de C #, suffit-il de changer le suffixe de fichier .csproj en .vcproj? Travailler avec VS 2005 ici et j'obtiens un fichier de résultats vide ...
ssc

1
Il a été écrit contre un projet 2010 pour C #, mais vous pourriez probablement le modifier très facilement en regardant le XML à l'intérieur d'un projet C ++ et en ajustant le code :-)
Danny Tuppeny

5
@ssc Il y a un code légèrement mis à jour publié sur mon blog qui pourrait être plus facile à modifier: blog.dantup.com/2012/05
Danny Tuppeny

5
Si vous utilisez Powershell 2.0, vous devrez ajouter =$trueaux paramètres MandatoryetValueFromPipeline
MoMo

79

Mise à jour: ReSharper depuis la version 8 a une fonction intégrée «Afficher les dépendances du projet» .

ReSharper version <8 a une fonction interne pour afficher les graphiques de dépendance en utilisant le visualiseur yFiles. Voir le manuel rapide en bas de l'article.

entrez la description de l'image ici

Comment

  1. Installez l'outil yEd à partir d' ici .
  2. Exécutez VS avec l'argument de ligne de commande /resharper.internal.
  3. Accédez à ReSharper / Interne / Afficher les dépendances.
  4. Spécifiez les projets que vous souhaitez inclure dans la «vue d'ensemble».
  5. Décochez "Exclure les nœuds terminaux ..." sauf si vous en avez besoin.
  6. Appuyez sur «Afficher».
  7. Utiliser la disposition hiérarchique dans yEd (Alt + Maj + H)
  8. Fournir des commentaires =)

2
Aussi Resharper> Inspect> Project Hierarchy pour obtenir la liste des projets référencés sur le courant
Lu55

5
Resharper> Architecture> 'Show Project Dependency Diagram'
Dr Blowhard

32

Vous pouvez obtenir un graphique de dépendance de projet facilement à l'aide de Visual Studio 2010 Ultimate, scannez jusqu'à 5 minutes dans cette vidéo pour voir comment: http://www.lovettsoftware.com/blogengine.net/post/2010/05/27/Architecture-Explorer .aspx

Dans Visual Studio 2010 Ultimate: Architecture | Générer un graphique de dépendance | Par Assemblée.


@CJohnson Vous pouvez effectuer cette opération pour le code C et C ++ si vous disposez de Visual Studio 2010 Feature Pack 2 . Voir aussi Comment: générer des graphiques de dépendance pour le code C et C ++
Esther Fan - MSFT

1
Essayé, jeté une exception. Apparemment, MS ne l'a jamais testé avec autre chose que quelques projets. Absolument sans valeur à mon avis.
C Johnson

1
Non seulement cela, c'est horriblement lent aussi. Je ferais ce -10 si je pouvais. J'ai écrit mon propre navigateur de dépendances de projet (pour notre propre système de construction) et c'était ultra-rapide par rapport à celui de Visual Studio.
C Johnson

@CJohnson Je conviens que c'est lent et enclin à lancer des exceptions pour les grandes solutions, mais c'est toujours mieux que rien. Je l'ai fait fonctionner en fermant toutes les applications, en arrêtant certains services et en redémarrant Visual Studio.
WynandB

Les grandes solutions pour moi, c'est environ 600 projets avec des millions de lignes de code. Il n'y a aucune chance que l'arrêt de quelques services soit une solution acceptable pour moi.
C Johnson le

19

J'ai écrit un outil qui pourrait vous aider. VS Solution Dependency Visualizer analyse les dépendances de projet dans une solution et crée un graphique de dépendance à partir de ces informations, ainsi qu'un rapport texte.


Quelles versions de Visual Studio et avec quel type de projets cela fonctionne-t-il? VS 2005 / C ++ ici et l'outil ne semble rien faire ...
ssc

cela fonctionne certainement avec vs 2008/2010 et .csproj / .vbproj. n'a pas testé avec vs2005, mais actuellement les fichiers .vcproj ne sont pas reconnus
devio

Cet outil n'affiche que le fichier de solution après son analyse :-(. Pas mes 300 projets environ.
thersch

@thersch si vous voulez que je l'examine, veuillez compresser les fichiers .sln et projets (afin que la structure de répertoire d'origine soit préservée), téléchargez-le sur un partage de fichiers, et contactez-moi via mon blog. thx
devio

9

J'ai eu un problème similaire, mais c'était encore plus compliqué car plusieurs projets faisaient référence à différentes versions du même assemblage.

Pour obtenir une sortie qui inclut les informations de version et vérifie d'éventuels problèmes de chargement de l'assembly d'exécution, j'ai créé cet outil:

https://github.com/smpickett/DependencyViewer

(lien direct vers la version github: https://github.com/smpickett/DependencyViewer/releases )


1
Bel outil! Simple et efficace. Merci pour ça! +1 de moi.
Buka

Vraiment super outil! J'ai rêvé de quelque chose comme ça pendant des années. Merci beaucoup de l'avoir partagé!
alehro

8

Vous pouvez créer un graphique de dépendance de vos projets dans VS 2010 Ultimate. L'Explorateur d'architecture vous permet de parcourir votre solution, de sélectionner des projets et les relations que vous souhaitez visualiser, puis de créer un graphique de dépendances à partir de votre sélection.

Pour plus d'informations, consultez les rubriques suivantes:

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

Comment: rechercher du code à l'aide de l'Explorateur d'architecture : http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx

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

Forum des outils de découverte architecturale et de modélisation Visual Studio 2010 : http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads


VS 2012 Professional aussi? Ou seulement VS 2012 Ultimate?
Kiquenet

@Kiquenet Vous pouvez créer des graphiques de dépendances dans VS 2012 Ultimate. Vous pouvez ouvrir et apporter des modifications limitées dans Premium et Pro.
Esther Fan - MSFT

5

Pour compléter la réponse d'eriawan sur les graphiques générés par NDepend, voir les captures d'écran ci-dessous. Vous pouvez télécharger et utiliser l'édition d'essai gratuite de NDepend pendant un certain temps.

En savoir plus sur NDepend Dependency Graph entrez la description de l'image ici

En savoir plus sur NDepend Dependency Matrix : entrez la description de l'image ici

Clause de non-responsabilité: je fais partie de l'équipe outil


NDepend est pour .NET, son clone CppDepend est pour C ++ et fonctionne avec les fichiers .vcxproj
Patrick de l'équipe NDepend

5

La solution Powershell est la meilleure. Je l'ai adapté dans un script bash qui fonctionne sur ma machine (TM):

#!/bin/bash

for i in `find . -type f -iname "*.csproj"`; do
    # get only filename
    project=`basename $i`

    # remove csproj extension
    project=${project%.csproj}

    references=`cat $i | grep '<ProjectReference' | cut -d "\"" -f 2`
    for ref in $references; do
        # keep only filename (assume Windows paths)
        ref=${ref##*\\}

        # remove csproj extension
        ref=${ref%.csproj}

        echo "[ $project ] -> [ $ref ]"
    done

done



3

VS 2019 a renommé le module de graphique de dépendance en Code Map

voici la documentation officielle: https://docs.microsoft.com/en-us/visualstudio/modeling/map-dependencies-across-your-solutions?view=vs-2019


«Pour créer et modifier des cartes de code, vous avez besoin de l'édition Entreprise de Visual Studio. Dans les éditions Visual Studio Community et Professional, vous pouvez ouvrir des diagrammes qui ont été générés dans l'édition Entreprise, mais vous ne pouvez pas les modifier.»
MatthewT

1

Cette version étendue du script PS de Danny Tuppeny montre à la fois des références de projet et externes:

Function Get-ProjectReferences($rootPath)
{
  $projectFiles = Get-ChildItem $rootPath -Filter *.csproj -Recurse
  $ns = @{ defaultNamespace = "http://schemas.microsoft.com/developer/msbuild/2003" }

  $projectFiles | ForEach-Object {
    $projectFile = $_ | Select-Object -ExpandProperty FullName
    $projectName = $_ | Select-Object -ExpandProperty BaseName
    $projectXml = [xml](Get-Content $projectFile)

    $projectReferences = $projectXml | Select-Xml '//defaultNamespace:ProjectReference/defaultNamespace:Name' -Namespace $ns | Select-Object -ExpandProperty Node | Select-Object -ExpandProperty "#text"
    $projectReferences | ForEach-Object {
        "PR:[" + $projectName + "]:[" + $_ + "]"
    }
  }

  $projectFiles | ForEach-Object {
    $projectFile = $_ | Select-Object -ExpandProperty FullName
    $projectName = $_ | Select-Object -ExpandProperty BaseName
    $projectXml = [xml](Get-Content $projectFile)

    $externalReferences = $projectXml | Select-Xml '//defaultNamespace:Reference/@Include' -Namespace $ns
    $externalReferences | ForEach-Object {
        "ER:[" + $projectName + "]:[" + $_ + "]"
    }

  }

}

Get-ProjectReferences "C:\projects" | Out-File "C:\temp\References.txt"

Il donnera un fichier séparé par deux-points qui peut être ouvert et analysé dans Excel.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.