Dependency Walker funktioniert mit normalen Win32-Binärdateien. Alle .NET-DLLs und -Exe haben einen kleinen Stub-Header-Teil, der sie wie normale Binärdateien aussehen lässt, aber im Grunde heißt es nur "Laden der CLR" - das ist alles, was der Abhängigkeits-Walker Ihnen sagen wird.
Um zu sehen, auf welche Dinge sich Ihre .NET-App tatsächlich stützt, können Sie den hervorragenden .NET-Reflektor von Red Gate verwenden. (BEARBEITEN: Beachten Sie, dass .NET Reflector jetzt ein kostenpflichtiges Produkt ist. ILSpy ist kostenlos und Open Source und sehr ähnlich.)
Laden Sie Ihre DLL hinein, klicken Sie mit der rechten Maustaste und wählen Sie "Analysieren". Anschließend wird ein Element "Abhängig von" angezeigt, in dem alle anderen benötigten DLLs (und Methoden in diesen DLLs) angezeigt werden.
Es kann manchmal schwieriger werden, da Ihre App von der X-DLL abhängt und die X-DLL vorhanden ist, aber aus irgendeinem Grund nicht zur Laufzeit geladen oder gefunden werden kann.
Um diese Probleme zu beheben, verfügt Microsoft über einen Assembly Binding Log Viewer, der Ihnen zeigt, was zur Laufzeit vor sich geht
Ich finde das kleine Dienstprogramm AsmSpy ein unschätzbares Werkzeug zur Lösung von Problemen beim Laden von Assemblys. Es werden alle Baugruppenreferenzen verwalteter Baugruppen einschließlich Baugruppenversionen aufgelistet.
Führen Sie es an einer Eingabeaufforderung im Verzeichnis von
.dll
mit den folgenden Argumenten aus:Installieren Sie es schnell mit Chocolatey:
quelle
Öffnen Sie die Assembly-Datei in ILDASM und sehen Sie sich die .assembly extern im MANIFEST an
quelle
Zum Durchsuchen von .NET-Code-Abhängigkeiten können Sie die Funktionen des Tools NDepend verwenden. Das Tool schlägt vor:
Eine solche Abfrage kann beispielsweise folgendermaßen aussehen:
Das Ergebnis sieht folgendermaßen aus: (Beachten Sie die Tiefe der Codemetrik , 1 für direkte Anrufer, 2 für Anrufer von direkten Anrufern ...) (Beachten Sie auch die Schaltfläche In Diagramm exportieren, um das Abfrageergebnis in ein Anrufdiagramm zu exportieren. )
Das Abhängigkeitsdiagramm sieht folgendermaßen aus:
Die Abhängigkeitsmatrix sieht folgendermaßen aus:
Die Abhängigkeitsmatrix ist de facto weniger intuitiv als das Diagramm, eignet sich jedoch besser zum Durchsuchen komplexer Codeabschnitte wie:
Haftungsausschluss: Ich arbeite für NDepend
quelle
Sie müssen keine Shareware-Apps oder -Tools herunterladen und installieren. Sie können dies programmgesteuert von .NET aus mit
Assembly.GetReferencedAssemblies()
quelle
[Reflection.Assembly]::LoadFile('C:\absolute\path\to\my.dll').GetReferencedAssemblies()
. Hat den schönen Vorteil, dass keine dunklen Windows-Speicherorte für Tools heruntergeladen oder gesucht werden. +1Wenn Sie die Mono-Toolchain verwenden, können Sie das
monodis
Dienstprogramm mit dem--assemblyref
Argument verwenden, um die Abhängigkeiten einer .NET-Assembly aufzulisten. Dies funktioniert sowohl für.exe
als auch für.dll
Dateien.Anwendungsbeispiel:
Beispielausgabe (.exe):
Beispielausgabe (.dll):
quelle
Aktivieren Sie die Protokollierung der Assemblybindung. Setzen Sie den Registrierungswert EnableLog in HKLM \ Software \ Microsoft \ Fusion auf 1. Beachten Sie, dass Sie Ihre Anwendung neu starten müssen (verwenden Sie iisreset), damit die Änderungen wirksam werden.
Tipp: Denken Sie daran, die Fusionsprotokollierung zu deaktivieren, wenn Sie fertig sind, da das Einschalten eine Leistungsbeeinträchtigung zur Folge hat.
quelle
Es ist lustig, dass ich ein ähnliches Problem hatte und nichts Passendes fand und mir des guten alten Dependency Walker bewusst war, also habe ich am Ende selbst eines geschrieben.
Dies befasst sich speziell mit .NET und zeigt rekursiv, welche Referenzen eine Assembly hat (und welche fehlen). Es werden auch native Bibliotheksabhängigkeiten angezeigt.
Es ist kostenlos (für den persönlichen Gebrauch) und hier für alle Interessierten verfügbar: www.netdepends.com
Feedback willkommen.
quelle
http://www.amberfish.net/
ChkAsm zeigt Ihnen alle Abhängigkeiten einer bestimmten Assembly auf einmal an, einschließlich der Versionen, und ermöglicht Ihnen die einfache Suche nach Assemblys in der Liste. Funktioniert für diesen Zweck viel besser als ILSpy ( http://ilspy.net/ ), das ich für diese Aufgabe verwendet habe.
quelle
Ein weiteres praktisches Reflector-Add-In, das ich verwende, ist die Abhängigkeitsstrukturmatrix . Es ist wirklich toll zu sehen, welche Klassen was verwenden. Außerdem ist es kostenlos.
quelle
Versuchen Sie, Ihre .NET-Assembly mit der Option zu kompilieren
--staticlink:"Namespace.Assembly"
. Dies zwingt den Compiler, beim Kompilieren alle Abhängigkeiten einzuziehen. Wenn eine Abhängigkeit auftritt, auf die nicht verwiesen wird, wird normalerweise eine Warn- oder Fehlermeldung mit dem Namen dieser Assembly ausgegeben.Namespace.Assembly
ist die Assembly, von der Sie vermuten, dass sie das Abhängigkeitsproblem hat. In der Regel wird diese Assembly nur statisch verknüpft, um alle Abhängigkeiten transitiv zu referenzieren.quelle
Die beste App, die ich sehe und benutze, zeigt verpasste / problematische DLLs: http://www.dependencywalker.com/
quelle