Выполнение SQL-подобных запросов для метаданных сборки .net - PullRequest
0 голосов
/ 17 июня 2019

Я знаю, что метаданные сборок .net хранятся в табличной форме, как описано в ECMA-335. Кто-нибудь разработал способ запроса этих данных, используя SQL-подобный язык (или любой другой язык запросов!)?

Причина, по которой я хочу это сделать, состоит в том, чтобы задавать вопросы о базе кода, такой как:

  1. Дайте мне имена классов и имена полей, в которых тип T встречается как поле.
  2. Дайте мне количество классов, в которых есть хотя бы одно поле с типом оценки и хотя бы одно поле с ссылочным типом.
  3. Дайте мне количество вхождений этого типа в качестве поля.

Одним из решений может быть чтение таблиц из сборки и загрузка их в базу данных SQL, но это кажется большой работой, если никто не делал этого раньше.

1 Ответ

1 голос
/ 17 июня 2019

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...