如何查找引用特定dll的所有程序集?

时间:2013-12-25 10:03:34

标签: c# dependencies assemblies ildasm

我有一个包含大量dlls的目录。我需要找到所有引用特定dll的内容。

我正在考虑以下解决方案:

  1. 循环程序集并使用ildasm
  2. 调用每个程序集
  3. manifest转储到文本文件
  4. 在文本文件中搜索所需的程序集名称。
  5. 然而,这种解决方案对我来说感觉极其错误。有没有更好的方法来实现它?

4 个答案:

答案 0 :(得分:10)

您可以为此目的编写一个小工具,使用Reflection查找引用的程序集:

string[] fileNames = ...; // get all the filenames
foreach (string fileName in fileNames) {
    var assembly = System.Reflection.Assembly.ReflectionOnlyLoadFrom(fileName);
    var referencedAssemblies = assembly.GetReferencedAssemblies();

    foreach (var assemblyName in referencedAssemblies) {
        // do your comparison
    }
}

答案 1 :(得分:0)

根据Microsoft documentationnn AppDomain.CurrentDomain.GetAssemblies()获取已加载到此应用程序域的执行上下文中的程序集。 About AppDomain.CurrentDomain.GetAssemblies()

您似乎需要更改从使用appdomain加载所需组件的策略,以便在应用程序文件夹中查找dll。

我找到了关于类似问题here

的讨论

答案 2 :(得分:0)

下载AsmSpy.exe,它可以选择列出程序集中的所有程序集和所有引用。

https://github.com/mikehadlow/AsmSpy

答案 3 :(得分:0)

下载IlSpy.exe,然后打开要查看其引用的程序集,它将列出所有引用的程序集。

https://github.com/icsharpcode/ILSpy/releases