Abhängigkeitsdiagramm von Visual Studio-Projekten

130

Ich migriere derzeit eine große Lösung (~ 70 Projekte) von VS 2005 + .NET 2.0 auf VS 2008 + .NET 3.5. Derzeit habe ich VS 2008 + .NET 2.0.

Das Problem ist, dass ich Projekte einzeln in ein neues .NET Framework verschieben muss, um sicherzustellen, dass kein .NET 2.0-Projekt auf ein .NET 3.5-Projekt verweist. Gibt es ein Tool, mit dem ich einen schönen Überblick über die Projektabhängigkeiten erhalten kann?

Migol
quelle

Antworten:

39

Haben Sie NDepend ausprobiert? Es zeigt Ihnen die Abhängigkeiten und Sie können auch die Verwendbarkeit Ihrer Klassen und Methoden analysieren.

Ihre Website:

http://ndepend.com


Um die Antwort von @Eriawan im April 2020 zu vervollständigen, wurde NDepend Version 2020.1 veröffentlicht, wobei Dependency Graph vollständig neu erstellt wurde. Es lässt sich jetzt auf große Lösungen aus Hunderten von Projekten skalieren und bietet viele Navigationsmöglichkeiten.

So sieht es im NopCommerce OSS-Projekt aus .

NDepend-Abhängigkeitsdiagramm für NopCommerce

So sieht es in der gesamten .NET Core 3-Klassenbibliothek (176 Assemblys) aus.

Geben Sie hier die Linkbeschreibung ein

Haftungsausschluss: Ich arbeite bei NDepend

Eriawan Kusumawardhono
quelle
3
Das Originalplakat sagte nicht, dass ndepend kostenlos ist und es löst das Problem.
Kirstan Ehre
6
Es war zum Zeitpunkt des Schreibens dieser Antwort vielleicht kostenlos, aber jetzt ist es nicht mehr so.
Levente Koncz
@ patrick-from-ndepend-team bitte bearbeite meine antwort nicht direkt und öffne stattdessen eine neue antwort.
Eriawan Kusumawardhono
Ok @EriawanKusumawardhono Entschuldigung, wenn es ein Problem für Sie ist. Auf diese Weise erhalten die Leser mehr Details und dies verbessert die Nützlichkeit der Antworten. Möchten Sie, dass ich die zusätzlichen Details und Screenshots entferne?
Patrick vom NDepend-Team
@PatrickfromNDependteam Die zusätzlichen Details und Screenshots sind in Ordnung. aber da dies ursprünglich meine Antwort ist, sieht es so aus, als würde mich Ihre Bearbeitung irgendwie dazu bringen, dass ich wie eine Arbeit bei NDepend aussehe. Bitte fügen Sie mit Ihrer Bearbeitung eine neue Antwort hinzu und betonen Sie, dass Ihre neue Antwort zusätzlich zu meiner Antwort ist. Vielen Dank vor :)
Eriawan Kusumawardhono
169

Ich brauchte etwas Ähnliches, wollte aber nicht dafür bezahlen (oder ein Tool installieren). Ich habe ein schnelles PowerShell-Skript erstellt, das die Projektreferenzen durchläuft und sie stattdessen in einem yuml.me- freundlichen Format ausspuckt :

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"
Danny Tuppeny
quelle
4
genial. Ich nahm dies und erweiterte es, um alle Unterprojekte zu durchlaufen, und erweiterte es dann erneut, um stattdessen eine SLN-Datei zu verwenden, um das gesamte Projekt abzubilden. Danke
Jon
Mit welchen Versionen von Visual Studio funktioniert dies? Um C ++ anstelle von C # -Projekten zu visualisieren, reicht es aus, das Suffix der .csproj-Datei in .vcproj zu ändern?
Wenn
1
Es wurde gegen ein 2010-Projekt für C # geschrieben, aber Sie könnten es wahrscheinlich sehr einfach optimieren, indem Sie sich das XML in einem C ++ - Projekt
ansehen
5
@ssc Es gibt leicht aktualisierten Code in meinem Blog, der möglicherweise einfacher zu optimieren ist: blog.dantup.com/2012/05/…
Danny Tuppeny
5
Wenn Sie Powershell 2.0 verwenden, müssen Sie =$truean die Parameter Mandatoryund anhängenValueFromPipeline
MoMo
79

Update: ReSharper seit Version 8 verfügt über die integrierte Funktion "Projektabhängigkeiten anzeigen" .

ReSharper Version <8 verfügt über eine interne Funktion zum Anzeigen von Abhängigkeitsdiagrammen bei Verwendung von yFiles Viewer. Siehe Kurzanleitung unten im Beitrag.

Geben Sie hier die Bildbeschreibung ein

Wie man

  1. Installieren Sie das yEd-Tool von hier aus .
  2. Führen Sie VS mit dem Befehlszeilenargument /resharper.internal aus.
  3. Gehen Sie zu ReSharper / Internal / Show Dependencies.
  4. Geben Sie Projekte an, die Sie in das Gesamtbild aufnehmen möchten.
  5. Deaktivieren Sie "Terminalknoten ausschließen ...", es sei denn, Sie benötigen sie.
  6. Drücken Sie 'Show'.
  7. Verwenden Sie das hierarchische Layout in yEd (Alt + Umschalt + H).
  8. Feedback geben =)
Shkredov S.
quelle
2
Auch Resharper> Inspect> Projekthierarchie, um eine Liste der Projekte zu erhalten, auf die aktuell
verwiesen wird
5
Resharper> Architektur> 'Projektabhängigkeitsdiagramm anzeigen'
Dr. Blowhard
32

Mit Visual Studio 2010 Ultimate können Sie auf einfache Weise ein Projektabhängigkeitsdiagramm erstellen. Scannen Sie dieses Video bis zu 5 Minuten, um zu sehen, wie: http://www.lovettsoftware.com/blogengine.net/post/2010/05/27/Architecture-Explorer .aspx

In Visual Studio 2010 Ultimate: Architektur | Abhängigkeitsdiagramm generieren | Durch Montage.

Chris Lovett
quelle
@CJohnson Sie können dies für C- und C ++ - Code tun, wenn Sie über Visual Studio 2010 Feature Pack 2 verfügen . Siehe auch
Gewusst
1
Versuchte es, warf eine Ausnahme. Anscheinend hat MS es nie mit etwas anderem als ein paar Projekten getestet. Absolut wertlos meiner Meinung nach.
C Johnson
1
Nicht nur das, es ist auch schrecklich langsam. Ich würde diese -10 machen, wenn ich könnte. Ich habe meinen eigenen Project Dependency Walker (für unser eigenes Build-System) geschrieben und er war blitzschnell im Vergleich zu dem im Visual Studio.
C Johnson
@CJohnson Ich stimme zu, dass es langsam und anfällig ist, Ausnahmen für große Lösungen auszulösen, aber es ist immer noch besser als nichts. Ich habe es zum Laufen gebracht, indem ich alle Anwendungen geschlossen, einige Dienste gestoppt und Visual Studio neu gestartet habe.
WynandB
Große Lösungen sind für mich rund 600 Projekte mit Millionen von Codezeilen. Keine Chance, dass das Stoppen einiger Dienste für mich eine akzeptable Lösung ist.
C Johnson
19

Ich habe ein Tool geschrieben, das Ihnen helfen könnte. VS Solution Dependency Visualizer analysiert Projektabhängigkeiten innerhalb einer Lösung und erstellt aus diesen Informationen ein Abhängigkeitsdiagramm sowie einen Textbericht.

devio
quelle
Mit welchen Versionen von Visual Studio und mit welchen Projekten funktioniert dies? VS 2005 / C ++ hier und das Tool scheint nichts zu tun ...
ssc
es funktioniert definitiv mit vs 2008/2010 und .csproj / .vbproj. habe nicht mit vs2005 getestet, aber derzeit werden .vcproj-Dateien nicht erkannt
devio
Dieses Tool zeigt nur die Lösungsdatei nach der Analyse :-(. Nicht meine etwa 300 Projekte.
Thersch
@thersch Wenn Sie möchten, dass ich es mir anschaue, zippen Sie bitte .sln- und Projektdateien (damit die ursprüngliche Verzeichnisstruktur erhalten bleibt), laden Sie sie auf eine Dateifreigabe hoch und kontaktieren Sie mich über meinen Blog. thx
devio
9

Ich hatte ein ähnliches Problem, aber es war noch komplizierter, da mehrere Projekte auf verschiedene Versionen derselben Assembly verweisen.

Um eine Ausgabe zu erhalten, die Versionsinformationen enthält und auf mögliche Probleme beim Laden von Laufzeitassemblierungen überprüft, habe ich dieses Tool erstellt:

https://github.com/smpickett/DependencyViewer

(direkter Link zur Github-Version: https://github.com/smpickett/DependencyViewer/releases )

Pickett
quelle
1
Schönes Werkzeug! Einfach und effizient. Dank dafür! +1 von mir.
Buka
Wirklich tolles Werkzeug! Ich habe jahrelang davon geträumt. Vielen Dank für das Teilen!
Alehro
8

Sie können in VS 2010 Ultimate ein Abhängigkeitsdiagramm Ihrer Projekte erstellen. Mit dem Architektur-Explorer können Sie Ihre Lösung durchsuchen, Projekte und die Beziehungen auswählen, die Sie visualisieren möchten, und dann aus Ihrer Auswahl ein Abhängigkeitsdiagramm erstellen.

Weitere Informationen finden Sie in den folgenden Themen:

Gewusst wie: Generieren von Diagrammdokumenten aus Code : http://msdn.microsoft.com/en-us/library/dd409453%28VS.100%29.aspx#SeeSpecificSource

Gewusst wie: Suchen von Code mithilfe des Architektur-Explorers : http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx

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

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

Esther Fan - MSFT
quelle
VS 2012 Professional auch? Oder nur VS 2012 Ultimate?
Kiquenet
@Kiquenet In VS 2012 Ultimate können Sie Abhängigkeitsdiagramme erstellen. Sie können Premium und Pro öffnen und begrenzte Änderungen vornehmen.
Esther Fan - MSFT
5

Um die Eriawan-Antwort auf von NDepend generierten Diagrammen zu vervollständigen, siehe Screenshots unten. Sie können die kostenlose Testversion von NDepend für eine Weile herunterladen und verwenden .

Weitere Informationen zum NDepend-Abhängigkeitsdiagramm Geben Sie hier die Bildbeschreibung ein

Weitere Informationen zur NDepend-Abhängigkeitsmatrix : Geben Sie hier die Bildbeschreibung ein

Haftungsausschluss: Ich bin Teil des Toolteams

Patrick vom NDepend-Team
quelle
NDepend ist für .NET, sein Klon CppDepend ist für C ++ und funktioniert mit .vcxproj-Dateien
Patrick vom NDepend-Team
5

Die Powershell-Lösung ist die beste. Ich habe es in ein Bash-Skript umgewandelt, das auf meinem Computer (TM) funktioniert:

#!/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
Nikolaos Georgiou
quelle
3

Wenn Sie einfach ein Abhängigkeitsdiagramm möchten, habe ich festgestellt, dass dies eine der saubersten Möglichkeiten ist, eines zu erhalten:

Abhängigkeitsanalysator

Kieran Benton
quelle
3

VS 2019 hat das Abhängigkeitsdiagrammmodul in Code Map umbenannt

Hier ist die offizielle Dokumentation: https://docs.microsoft.com/en-us/visualstudio/modeling/map-dependencies-across-your-solutions?view=vs-2019

Steven J.
quelle
"Zum Erstellen und Bearbeiten von Codekarten benötigen Sie Visual Studio Enterprise Edition. In Visual Studio Community- und Professional-Editionen können Sie Diagramme öffnen, die in Enterprise Edition generiert wurden, aber nicht bearbeiten."
MatthewT vor
1

Diese erweiterte Version des PS-Skripts von Danny Tuppeny zeigt sowohl Projekt- als auch externe Referenzen:

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"

Es wird eine durch Doppelpunkte getrennte Datei angezeigt, die in Excel geöffnet und analysiert werden kann.

Svein Terje Gaup
quelle
-1

Ich habe alle Antworten überprüft, aber keine der Optionen hat mich zufriedengestellt. Deshalb habe ich mein eigenes Tool geschrieben, um eine Vorschau der Projekt-Projekt-Abhängigkeiten anzuzeigen.

https://github.com/Audionysos/VSProjectReferencesViewer

Es ist früh, aber es hat für meine Bedürfnisse funktioniert :)

Paweł Audionysos
quelle