在.net程序集元数据上运行类似SQL的查询

时间:2019-06-17 15:12:18

标签: sql .net reflection metadata .net-assembly

我知道.net程序集的元数据是以表格形式存储的,如ECMA-335中所述。有没有人开发出一种使用类似SQL的语言(或任何查询语言!)查询数据的方法?

我要这样做的原因是要询问有关代码库的问题,例如:

  1. 请给我类型T作为字段出现的类和字段名。
  2. 请提供至少具有一个值类型的字段和至少一个具有引用类型的字段的类的数量。
  3. 请将该字段的出现次数提供给我。

一种解决方案可能是从表中读取表,然后将它们加载到SQL数据库中,但是,如果以前没有人这样做,这似乎是很多工作。

1 个答案:

答案 0 :(得分:1)

我认为

LINQ效果很好。收集相关的元数据并不难:获取所有程序集,获取所有类型,获取所有成员。从那里,您可以使用LINQ查询几乎所有内容。

看看这个例子:

var members = AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(x => x.GetTypes())
    .SelectMany(x => x.GetMembers())
    .ToArray();

Console.WriteLine(members.Count(x => x.MemberType == MemberTypes.Method));