【问题标题】:Running SQL-like queries on .net assembly metadata在 .net 程序集元数据上运行类似 SQL 的查询
【发布时间】:2019-06-17 15:12:18
【问题描述】:

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

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

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

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

【问题讨论】:

  • LINQ 在我看来效果很好。收集相关元数据并不难:获取所有程序集、获取所有类型、获取所有成员。从那里您可以使用 LINQ 查询几乎所有内容。
  • 是的,这是一个很好的观点。我想我在我的脑海里把这件事复杂化了!把它作为答案,我会接受的。

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


【解决方案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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-22
    • 2011-03-01
    • 1970-01-01
    • 2016-09-11
    • 2011-03-22
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多