运行 SQL 类 .net 程序集元数据查询

Running SQL-like queries on .net assembly metadata

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

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

  1. 给我 类 的名称和类型 T 作为字段出现的字段名。
  2. 给我 类 的数量,其中至少有一个字段具有值类型,并且至少有一个字段具有引用类型。
  3. 给我这个类型出现的次数作为一个字段。

一个解决方案可能是从程序集中读取表,并将它们加载到 SQL 数据库中,但这似乎需要很多工作,如果以前没有人这样做的话。

我认为

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));