Gráfico de dependencia de proyectos de Visual Studio


130

Actualmente estoy migrando una gran solución (~ 70 proyectos) de VS 2005 + .NET 2.0 a VS 2008 + .NET 3.5. Actualmente tengo VS 2008 + .NET 2.0.

El problema es que necesito mover proyectos uno por uno al nuevo marco .NET para asegurar que ningún proyecto .NET 2.0 haga referencia al proyecto .NET 3.5. ¿Hay alguna herramienta que me dé un buen gráfico de las dependencias del proyecto?

Respuestas:


39

¿Has probado NDepend? Le mostrará las dependencias y también puede analizar la usabilidad de sus clases y métodos.

Su página web:

http://ndepend.com


Para completar la respuesta @Eriawan en abril de 2020, se ha lanzado NDepend versión 2020.1 con el gráfico de dependencia completamente reconstruido. Ahora escala en grandes soluciones hechas de cientos de proyectos y ofrece muchas facilidades de navegación.

Así es como se ve en el proyecto NopCommerce OSS .

Gráfico de dependencia de NDepend en NopCommerce

Así es como se ve en toda la biblioteca de clases de .NET Core 3 (176 ensamblajes).

ingrese la descripción del enlace aquí

Descargo de responsabilidad: trabajo en NDepend


44
El póster original no decía que ndepend era gratis y resuelve el problema.
krystan honor

66
Puede haber sido gratis al momento de escribir esta respuesta, pero ahora no lo es.
Levente Koncz

@ patrick-from-ndepend-team por favor no edite directamente mi respuesta y abra una nueva respuesta en su lugar.
Eriawan Kusumawardhono

Ok @EriawanKusumawardhono lo siento si es un problema para ti. De esta forma, los lectores obtienen más detalles directamente y esto mejora la utilidad de la respuesta. ¿Desea que elimine los detalles adicionales y las capturas de pantalla?
Patrick del equipo NDepend

@PatrickfromNDependteam los detalles adicionales y las capturas de pantalla están bien. pero como esta es originalmente mi respuesta, parece que tu edición de alguna manera me hace parecer que trabajo en NDepend. Agregue una nueva respuesta con su edición y también enfatice que su nueva respuesta es una adición a mi respuesta. Gracias antes :)
Eriawan Kusumawardhono

169

Necesitaba algo similar, pero no quería pagar (o instalar) una herramienta para hacerlo. Yo creé un script rápida PowerShell que pasa a través de las referencias del proyecto y les escupe en un yuml.me amigable formato en su lugar:

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"

44
increíble. Tomé esto y lo extendí para pasar por todos los subproyectos, luego lo extendí nuevamente para tomar un archivo sln en lugar de asignar todo el proyecto. Gracias
Jon

¿Con qué versiones de Visual Studio funciona esto? Además, para visualizar proyectos de C ++ en lugar de C #, ¿es suficiente cambiar el sufijo del archivo .csproj a .vcproj? Trabajar con VS 2005 aquí y obtener un archivo de resultados vacío ...
SSC

1
Fue escrito contra un proyecto de 2010 para C #, pero probablemente podría modificarlo fácilmente mirando el XML dentro de un proyecto de C ++ y ajustando el código :-)
Danny Tuppeny

55
@ssc Hay un código ligeramente actualizado publicado en mi blog que podría ser más fácil de modificar: blog.dantup.com/2012/05/…
Danny Tuppeny

55
Si está utilizando Powershell 2.0, deberá agregar =$truelos parámetros MandatoryyValueFromPipeline
MoMo

79

Actualización: ReSharper desde la versión 8 tiene incorporada la función 'Ver dependencias del proyecto' .

ReSharper versión <8 tiene una función interna para mostrar gráficos de dependencia al usar el visor yFiles. Vea el manual rápido en la parte inferior de la publicación.

ingrese la descripción de la imagen aquí

Cómo

  1. Instale la herramienta yEd desde aquí .
  2. Ejecute VS con el argumento de línea de comando /resharper.internal.
  3. Vaya a ReSharper / Internal / Show Dependencies.
  4. Especifique los proyectos que desea incluir en el 'panorama general'.
  5. Desmarque 'Excluir nodos terminales ...' a menos que lo necesite.
  6. Presione 'Mostrar'.
  7. Usar diseño jerárquico en yEd (Alt + Shift + H)
  8. Proporcionar comentarios =)

2
También Resharper> Inspeccionar> Jerarquía de proyectos para obtener una lista de los proyectos que hacen referencia a los actuales
Lu55

55
Resharper> Arquitectura> 'Mostrar diagrama de dependencia del proyecto'
Dr. Blowhard

32

Puede obtener un gráfico de dependencia del proyecto fácilmente con Visual Studio 2010 Ultimate, escanee a 5 minutos en este video para ver cómo: http://www.lovettsoftware.com/blogengine.net/post/2010/05/27/Architecture-Explorer .aspx

En Visual Studio 2010 Ultimate: Arquitectura | Generar gráfico de dependencia | Por asamblea.


@CJohnson Puede hacer esto para el código C y C ++ si tiene Visual Studio 2010 Feature Pack 2 . Vea también Cómo: Generar gráficos de dependencia para el código C y C ++
Esther Fan - MSFT

1
Probé, lanzó una excepción. Aparentemente, MS nunca lo probó con nada más que unos pocos proyectos. Absolutamente inútil en mi opinión.
C Johnson

1
No solo eso, también es terriblemente lento. Haría esto -10 si pudiera. Escribí mi propio walker de dependencia de proyectos (para nuestro propio sistema de compilación) y fue increíblemente rápido en comparación con el de Visual Studio.
C Johnson

@CJohnson Estoy de acuerdo en que es lento y propenso a lanzar excepciones para soluciones grandes, pero aún así es mejor que nada. Lo hice funcionar cerrando todas las aplicaciones, deteniendo algunos servicios y reiniciando Visual Studio.
WynandB

Grandes soluciones para mí son alrededor de 600 proyectos con millones de líneas de código. No hay posibilidad de que suspender algunos servicios sea una solución aceptable para mí.
C Johnson

19

Escribí una herramienta que podría ayudarte. VS Solution Dependency Visualizer analiza las dependencias del proyecto dentro de una solución y crea un gráfico de dependencia a partir de esta información, así como un informe de texto.


¿Con qué versiones de Visual Studio y con qué tipo de proyectos funciona? VS 2005 / C ++ por aquí y la herramienta no parece hacer nada ...
SSC

definitivamente funciona con vs 2008/2010 y .csproj / .vbproj. no probó con vs2005, pero actualmente no se reconocen los archivos
.vcproj

Esta herramienta muestra sólo el archivo de solución después de analizarlo :-( No mis cerca de 300 proyectos..
thersch

@thersch si quiere que le eche un vistazo, comprima .sln y archivos de proyecto (para preservar la estructura del directorio original), cárguelo en un recurso compartido de archivos y contácteme a través de mi blog. thx
devio

9

Tuve un problema similar, pero fue aún más complicado porque varios proyectos hacían referencia a diferentes versiones del mismo ensamblaje.

Para obtener una salida que incluya información de versión y verifique posibles problemas de carga del ensamblaje en tiempo de ejecución, creé esta herramienta:

https://github.com/smpickett/DependencyViewer

(Enlace directo a la versión de Github: https://github.com/smpickett/DependencyViewer/releases )


1
Buena herramienta! Simple y eficiente. ¡Gracias por eso! +1 de mi parte
Buka

Muy buena herramienta! Soñé con algo así durante años. ¡Muchas gracias por compartirlo!
alehro

8

Puede crear un gráfico de dependencia de sus proyectos en VS 2010 Ultimate. Architecture Explorer le permite explorar su solución, seleccionar proyectos y las relaciones que desea visualizar, y luego crear un gráfico de dependencia a partir de su selección.

Para obtener más información, consulte los siguientes temas:

Cómo: Generar documentos gráficos a partir del código : http://msdn.microsoft.com/en-us/library/dd409453%28VS.100%29.aspx#SeeSpecificSource

Cómo: Buscar código usando el Explorador de arquitectura : http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx

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

Foro de Visual Studio 2010 Architectural Discovery & Modeling Tools : http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads


VS 2012 Professional también? ¿O solo VS 2012 Ultimate?
Kiquenet

@ Kiquenet Puede crear gráficos de dependencia en VS 2012 Ultimate. Puede abrir y realizar cambios limitados en Premium y Pro.
Esther Fan - MSFT

5

Para completar la respuesta eriawan en gráficos generados por NDepend, vea las capturas de pantalla a continuación. Puede descargar y usar la edición de prueba gratuita de NDepend por un tiempo.

Más información sobre el gráfico de dependencia de NDepend ingrese la descripción de la imagen aquí

Más sobre NDepend Dependency Matrix : ingrese la descripción de la imagen aquí

Descargo de responsabilidad: soy parte del equipo de herramientas


NDepend es para .NET, su clon CppDepend es para C ++ y funciona con archivos .vcxproj
Patrick del equipo de NDepend el

5

La solución Powershell es la mejor. Lo adapté a un script bash que funciona en mi máquina (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




1

Esta versión extendida de la secuencia de comandos PS de Danny Tuppeny muestra referencias externas y del proyecto:

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"

Le dará un archivo separado por dos puntos que se puede abrir y analizar en Excel.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.