Dependency walker bekerja pada biner win32 normal. Semua .NET dll dan exe memiliki bagian header rintisan kecil yang membuat mereka terlihat seperti binari normal, tetapi pada dasarnya semua itu mengatakan "memuat CLR" - jadi hanya itu yang akan diberitahukan oleh alat bantu jalan ketergantungan kepada Anda.
Untuk melihat hal mana yang benar-benar diandalkan oleh aplikasi .NET Anda, Anda dapat menggunakan reflektor .NET yang sangat bagus dari Red Gate. (EDIT: Perhatikan bahwa .NET Reflector sekarang menjadi produk berbayar. ILSpy gratis dan open source dan sangat mirip.)
Load DLL Anda ke dalamnya, klik kanan, dan pilih 'Analyze' - Anda akan melihat item "Depends On" yang akan menampilkan semua dll lainnya (dan metode di dalam dll itu) yang dibutuhkan.
Kadang-kadang bisa menjadi lebih rumit, karena aplikasi Anda bergantung pada X dll, dan X dll ada, tetapi karena alasan apa pun tidak dapat dimuat atau ditempatkan saat runtime.
Untuk memecahkan masalah semacam itu, Microsoft memiliki Penampil Log Mengikat Majelis yang dapat menunjukkan kepada Anda apa yang terjadi saat runtime
Saya menemukan utilitas kecil AsmSpy alat yang sangat berharga untuk menyelesaikan masalah dengan rakitan pemuatan. Ini mencantumkan semua referensi rakitan dari rakitan terkelola termasuk versi rakitan.
Jalankan dalam prompt perintah di direktori
.dll
dengan argumen berikut:Instal dengan cepat dengan Chocolatey:
sumber
Buka file assembly di ILDASM dan cari @ .assembly extern di MANIFEST
sumber
Untuk menjelajahi dependensi kode .NET, Anda dapat menggunakan kapabilitas alat NDepend. Alat tersebut mengusulkan:
Misalnya kueri seperti itu bisa terlihat seperti:
Dan hasilnya terlihat seperti: (perhatikan kedalaman metrik kode , 1 untuk penelepon langsung, 2 untuk penelepon langsung ...) (perhatikan juga tombol Export to Graph untuk mengekspor hasil query ke Call Graph )
Grafik ketergantungan terlihat seperti:
Matriks ketergantungan terlihat seperti:
Matriks dependensi secara de-facto kurang intuitif dibandingkan grafik, tetapi lebih cocok untuk menjelajahi bagian kode yang kompleks seperti:
Penafian: Saya bekerja untuk NDepend
sumber
Anda tidak perlu mengunduh dan menginstal aplikasi atau alat shareware. Anda dapat melakukannya secara terprogram dari .NET menggunakan
Assembly.GetReferencedAssemblies()
sumber
[Reflection.Assembly]::LoadFile('C:\absolute\path\to\my.dll').GetReferencedAssemblies()
. Memiliki keuntungan bagus karena tidak mengunduh atau berburu lokasi Windows yang tidak jelas untuk alat. +1Jika Anda menggunakan toolchain Mono, Anda dapat menggunakan yang
monodis
utilitas dengan--assemblyref
argumen untuk daftar dependensi NET perakitan. Ini akan bekerja pada file.exe
dan.dll
.Contoh penggunaan:
Contoh keluaran (.exe):
Contoh keluaran (.dll):
sumber
Aktifkan pencatatan pengikatan perakitan menetapkan nilai registri EnableLog di HKLM \ Software \ Microsoft \ Fusion ke 1. Perhatikan bahwa Anda harus memulai ulang aplikasi Anda (gunakan iisreset) agar perubahan dapat berpengaruh.
Tip: Ingatlah untuk mematikan pencatatan fusi setelah Anda selesai karena ada hukuman kinerja untuk menyalakannya.
sumber
Lucu sekali saya memiliki masalah yang sama dan tidak menemukan sesuatu yang cocok dan menyadari Dependency Walker yang baik sehingga pada akhirnya saya menulisnya sendiri.
Ini berhubungan dengan .NET secara khusus dan akan menunjukkan referensi apa yang dimiliki oleh assembly (dan hilang) secara rekursif. Ini juga akan menunjukkan dependensi perpustakaan asli.
Gratis (untuk penggunaan pribadi) dan tersedia di sini untuk siapa saja yang tertarik: www.netdepends.com
Umpan balik diterima.
sumber
http://www.amberfish.net/
ChkAsm akan menunjukkan semua dependensi rakitan tertentu sekaligus, termasuk versinya, dan dengan mudah membiarkan Anda mencari rakitan dalam daftar. Bekerja jauh lebih baik untuk tujuan ini daripada ILSpy ( http://ilspy.net/ ), yang biasa saya gunakan untuk tugas ini.
sumber
Add-in Reflector berguna lainnya yang saya gunakan adalah Dependency Structure Matrix . Sangat menyenangkan melihat kelas mana yang menggunakan apa. Ditambah gratis.
sumber
Coba kompilasi perakitan .NET Anda dengan opsi
--staticlink:"Namespace.Assembly"
. Ini memaksa kompilator untuk menarik semua dependensi pada waktu kompilasi. Jika menemukan ketergantungan yang tidak direferensikan itu akan memberikan peringatan atau pesan kesalahan biasanya dengan nama rakitan itu.Namespace.Assembly
adalah rakitan yang Anda curigai mengalami masalah ketergantungan. Biasanya hanya menghubungkan perakitan ini secara statis akan mereferensikan semua dependensi secara transitif.sumber
Aplikasi terbaik yang saya lihat dan gunakan, menunjukkan dll yang terlewat / bermasalah: http://www.dependencywalker.com/
sumber