Grafico delle dipendenze dei progetti di Visual Studio


130

Attualmente sto migrando una grande soluzione (~ 70 progetti) da VS 2005 + .NET 2.0 a VS 2008 + .NET 3.5. Attualmente ho VS 2008 + .NET 2.0.

Il problema è che devo spostare i progetti uno alla volta nel nuovo framework .NET assicurandomi che nessun progetto .NET 2.0 faccia riferimento al progetto .NET 3.5. Esiste uno strumento che potrebbe darmi un bel grafico delle dipendenze del progetto?

Risposte:


39

Hai provato NDepend? Ti mostrerà le dipendenze e potrai anche analizzare l'usabilità delle tue classi e dei tuoi metodi.

Il loro sito Web:

http://ndepend.com


Per completare la risposta di @Eriawan nell'aprile 2020, è stata rilasciata la versione NDepend 2020.1 con il grafico delle dipendenze completamente ricostruito. Ora si adatta a soluzioni di grandi dimensioni costituite da centinaia di progetti e offre molte funzionalità di navigazione.

Ecco come appare nel progetto OSS di NopCommerce .

Grafico di dipendenza NDepend su NopCommerce

Ecco come appare sull'intera libreria di classi .NET Core 3 (176 assembly).

inserisci qui la descrizione del link

Disclaimer: lavoro a NDepend


4
il poster originale non diceva che ndepend era gratuito e risolve il problema.
Krystan Honor

6
Potrebbe essere stato libero al momento di scrivere questa risposta, ma ora non lo è.
Levente Koncz,

@ patrick-from-ndepend-team, per favore non modificare direttamente la mia risposta e aprire una nuova risposta.
Eriawan Kusumawardhono,

Ok @EriawanKusumawardhono scusa se è un problema per te. In questo modo i lettori ottengono più dettagli direttamente e questo migliora l'utilità della risposta, vuoi rimuovere i dettagli extra e gli screenshot?
Patrick del team NDepend il

@PatrickfromNDependteam i dettagli extra e gli screenshot sono OK. ma poiché questa è originariamente la mia risposta, sembra che la tua modifica in qualche modo mi faccia sembrare lavoro su NDepend. Aggiungi una nuova risposta con la modifica e sottolinea anche che la nuova risposta è aggiunta alla mia risposta. Grazie prima :)
Eriawan Kusumawardhono il

169

Avevo bisogno di qualcosa di simile, ma non volevo pagare (o installare) uno strumento per farlo. Ho creato un rapido script di PowerShell che analizza i riferimenti del progetto e li sputa in un formato amichevole yuml.me :

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
eccezionale. Ho preso questo e l'ho esteso per passare attraverso tutti i progetti secondari, quindi l'ho esteso di nuovo per prendere un file sln invece di mappare l'intero progetto. Grazie
Jon

Con quali versioni di Visual Studio funziona? Inoltre, per visualizzare i progetti C ++ anziché C #, è sufficiente modificare il suffisso del file .csproj in .vcproj? Lavorando con VS 2005 qui e ottengo un file di risultati vuoto ...
ssc,

1
È stato scritto contro un progetto del 2010 per C #, ma probabilmente potresti modificarlo molto facilmente guardando l'XML all'interno di un progetto C ++ e modificando il codice :-)
Danny Tuppeny,

5
@ssc Sul mio blog è stato pubblicato un codice leggermente aggiornato che potrebbe essere più facile da modificare: blog.dantup.com/2012/05/…
Danny Tuppeny,

5
Se stai usando Powershell 2.0 dovrai aggiungere =$truei parametri MandatoryeValueFromPipeline
MoMo

79

Aggiornamento: ReSharper dalla versione 8 ha incorporato la funzione "Visualizza dipendenze del progetto" .

La versione di ReSharper <8 ha una funzione interna per mostrare i grafici delle dipendenze nell'uso del visualizzatore yFiles. Vedi il manuale rapido in fondo al post.

inserisci qui la descrizione dell'immagine

Come

  1. Installa lo strumento yEd da qui .
  2. Eseguire VS con /resharper.internal argomento della riga di comando.
  3. Vai a ReSharper / Internal / Show Dependencies.
  4. Specificare i progetti che si desidera includere nel "quadro generale".
  5. Deseleziona "Escludi nodi terminali ..." a meno che non sia necessario.
  6. Premi "Mostra".
  7. Usa layout gerarchico in yEd (Alt + Maiusc + H)
  8. Fornisci feedback =)

2
Anche Resharper> Ispeziona> Gerarchia dei progetti per ottenere un elenco dei progetti che fanno riferimento all'attuale
Lu55,

5
Resharper> Architettura> "Mostra diagramma di dipendenza del progetto"
Dr Blowhard,

32

È possibile ottenere facilmente un grafico di dipendenza del progetto utilizzando Visual Studio 2010 Ultimate, scansionare fino a 5 minuti in questo video per vedere come: http://www.lovettsoftware.com/blogengine.net/post/2010/05/27/Architecture-Explorer aspx

In Visual Studio 2010 Ultimate: Architecture | Genera grafico delle dipendenze | Per Assemblea.



1
Ho provato, ha gettato un'eccezione. Apparentemente MS non l'ha mai testato con nulla oltre a pochi progetti. Assolutamente inutile secondo me.
C Johnson,

1
Non solo, è anche terribilmente lento. Farei questo -10 se potessi. Ho scritto il mio walker di dipendenza del progetto (per il nostro sistema di compilazione) ed è stato velocissimo rispetto a quello in Visual Studio.
C Johnson,

@CJohnson Sono d'accordo che è lento e incline a generare eccezioni per soluzioni di grandi dimensioni, ma è comunque meglio di niente. Ho funzionato chiudendo tutte le applicazioni, arrestando alcuni servizi e riavviando Visual Studio.
WynandB,

Grandi soluzioni per me sono circa 600 progetti con milioni di righe di codice. Nessuna possibilità che fermare alcuni servizi sia una soluzione accettabile per me.
C Johnson,

19

Ho scritto uno strumento che potrebbe aiutarti. VS Solution Dependency Visualizer analizza le dipendenze del progetto all'interno di una soluzione e crea un diagramma delle dipendenze da queste informazioni, nonché un rapporto di testo.


Con quali versioni di Visual Studio e con che tipo di progetti funziona? VS 2005 / C ++ qui e lo strumento non sembra fare nulla ...
ssc,

funziona sicuramente con vs 2008/2010 e .csproj / .vbproj. non ho provato con vs2005, ma attualmente i file .vcproj non sono riconosciuti
devio

Questo strumento mostra solo il file di soluzione dopo aver analizzato lo :-( Non i miei circa 300 progetti..
thersch

@thersch se vuoi che lo guardi, comprimi .sln e progetti i file (in modo da preservare la struttura della directory originale), caricalo su una condivisione di file e contattami tramite il mio blog. grazie
devio il

9

Ho avuto un problema simile, ma è stato ulteriormente complicato perché diversi progetti si riferivano a versioni diverse dello stesso assieme.

Per ottenere un output che includa informazioni sulla versione e controlli possibili problemi di caricamento dell'assembly di runtime, ho creato questo strumento:

https://github.com/smpickett/DependencyViewer

(collegamento diretto alla versione di github: https://github.com/smpickett/DependencyViewer/releases )


1
Strumento carino! Semplice ed efficiente Grazie per quello! +1 da me.
Buka,

Strumento davvero eccezionale! Ho sognato qualcosa del genere per anni. Grazie mille per averlo condiviso!
Alehro,

8

È possibile creare un grafico delle dipendenze dei progetti in VS 2010 Ultimate. Architecture Explorer consente di sfogliare la soluzione, selezionare i progetti e le relazioni che si desidera visualizzare, quindi creare un grafico delle dipendenze dalla selezione.

Per ulteriori informazioni, vedere i seguenti argomenti:

Procedura: generare documenti grafici dal codice : http://msdn.microsoft.com/en-us/library/dd409453%28VS.100%29.aspx#SeeSpecificSource

Procedura: trovare il codice utilizzando Architecture Explorer : http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx

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

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


Anche VS 2012 Professional? O solo VS 2012 Ultimate?
Kiquenet,

@Kiquenet È possibile creare grafici delle dipendenze in VS 2012 Ultimate. Puoi aprire e apportare modifiche limitate in Premium e Pro.
Esther Fan - MSFT,

5

Per completare la risposta eriawan sui grafici generati da NDepend, vedere gli screenshot di seguito. È possibile scaricare e utilizzare l'edizione di prova gratuita di NDepend per un po '.

Altre informazioni sul grafico delle dipendenze NDepend inserisci qui la descrizione dell'immagine

Altre informazioni sulla matrice di dipendenza NDepend : inserisci qui la descrizione dell'immagine

Disclaimer: faccio parte del team di strumenti


NDepend è per .NET, il suo clone CppDepend è per C ++ e funziona con file .vcxproj
Patrick del team NDepend,

5

La soluzione Powershell è la migliore. L'ho adattato in uno script bash che funziona sulla mia macchina (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 ha rinominato il modulo del grafico delle dipendenze in Code Map

ecco la documentazione ufficiale: https://docs.microsoft.com/en-us/visualstudio/modeling/map-dependencies-across-your-solutions?view=vs-2019


"Per creare e modificare le mappe di codice, è necessaria l'edizione Visual Studio Enterprise. Nelle edizioni Visual Studio Community e Professional, è possibile aprire i diagrammi che sono stati generati nell'edizione Enterprise, ma non è possibile modificarli."
Matteo

1

Questa versione estesa dello script PS di Danny Tuppeny mostra riferimenti sia a progetto che esterni:

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"

Fornirà un file separato da due punti che può essere aperto e analizzato in Excel.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.