私はDLLのコレクションを持っています(たとえば20)。特定の DLL (DLL A など) が依存しているすべての DLL を調べるにはどうすればよいですか?
6 に答える
プログラムで意味する場合は、を使用しますAssembly.GetReferencedAssemblies
。
これを再帰的に使用して、必要なすべてのアセンブリを見つけることができます。(つまり、X の依存関係を見つけてから、依存関係の依存関係などを見つけます。)
質問には「C#」というタグが付けられているので、マネージド DLL (アセンブリ) について話していると思います。その場合、dependencywalker は役に立ちません。プログラムでそれを行いたい場合は、JetBrians の dotPeek と RedGate の Reflector が適しています。または、Visual Studio でオブジェクト インスペクターを使用することもできます。
ただし、それは長いプロセスであり、面倒でもあります。Assembly.GetReferencedAssemblies
Jon が述べたように、私は を使用する短い C# プログラム/F# スクリプトを作成します。
代わりに、プログラム (C# コード) を使用してネイティブ DLL の依存関係を調べたい場合は、PE ファイル (MS dll および exe ファイル形式) とその IAT (インポート アドレス テーブル) を調べる必要があります。簡単ではありませんが、不可能ではありません...
MSDNのhereと PE セクションを理解するために hereを開始し、マネージ ライブラリを使用してそれを読み取ります (Mono プロジェクトの一部を含む多くのライブラリがあります (私はCecilを考えています。ネイティブ バイナリでも動作するはずです)。過去に私は良いジョン・ゴフからこれを使用しました.
これを理解するには、Dependency Walker http://www.dependencywalker.comを使用できます。ただし、x32 と x64 の違いに注意してください。
Dependency Walker は、32 ビットまたは 64 ビットの Windows モジュール (exe、dll、ocx、sys など) をスキャンし、すべての依存モジュールの階層ツリー図を作成する無料のユーティリティです。
.NET アセンブリの場合、アセンブリが依存しているアセンブリを表示する優れたツールはAsmSpyです。