【问题标题】:How to find all assemblies that reference a specific dll?如何找到引用特定 dll 的所有程序集?
【发布时间】:2013-12-25 10:03:33
【问题描述】:

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

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

  1. 循环程序集并使用ildasm 调用每个程序集
  2. manifest 转储到文本文件中
  3. 在文本文件中搜索所需的程序集名称。

然而,我觉得这个解决方案非常错误。有没有更好的方法来实现它?

【问题讨论】:

  • 你可以使用 System.Reflection.Assembly.GetReferencedAssemblies

标签: c# dependencies assemblies ildasm


【解决方案1】:

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

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
    }
}

【讨论】:

  • 谢谢!确实好多了
  • @Dirk ,我们如何从 GAC 加载程序集并获取参考?
【解决方案2】:

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

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

我找到了关于类似问题的讨论here

【讨论】:

    【解决方案3】:

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

    https://github.com/mikehadlow/AsmSpy

    【讨论】:

      【解决方案4】:

      下载IlSpy.exe,打开你想查看其引用的程序集,它会列出所有引用的程序集。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多