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

4
我有一个包含大量dll的目录。我需要找到所有引用特定dll的dll。
我考虑以下解决方案:
  1. 循环遍历程序集,并使用ildasm调用每个程序集
  2. 将manifest转储到文本文件中
  3. 在文本文件中搜索所需的程序集名称。
然而,这个解决方案让我感觉非常不对。有更好的方法来实现吗?

1
你可以使用 System.Reflection.Assembly.GetReferencedAssemblies。 - Baldrick
4个回答

13

你可以编写一个小工具来实现这个目的,使用反射来查找引用的程序集:

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

谢谢!确实好多了。 - MichaelS
@Dirk,我们如何从全局程序集缓存中加载程序集并获取引用? - vijay

0

0
根据微软文档,AppDomain.CurrentDomain.GetAssemblies() 获取已加载到此应用程序域的执行上下文中的程序集。关于 AppDomain.CurrentDomain.GetAssemblies() 的更多信息 看起来您需要改变加载所需程序集的策略,从使用应用程序域转而在您的应用程序文件夹中查找 DLL。
我在类似问题的讨论中找到了 这里

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接