Существует способ получить список классов и методов, прочитав IL Code. Решение, о котором я говорю, может быть немного длинным, но оно будет работать.
IL - это ничего, кроме .exe или .dll. Сначала попробуйте преобразовать это в C# или VB, используя ILSpy. Загрузите этот инструмент и откройте свою DLL. Этот инструмент может конвертировать ваш IL-код в C# или VB.
После преобразования сохраните преобразованный код в текстовый файл.
Затем прочитайте текстовый файл и найдите в нем классы и методы.
Для чтения Метод имен:
MatchCollection mc = Regex.Matches(str, @"(\s)([A-Z]+[a-z]+[A-Z]*)+\(");
Чтобы прочитать имена классов:
перебирать файл построчно и проверьте, есть ли строка название "Класс". если у него есть имя, то разделите значения и сохраните значение/текст, который приходит после имени «Класс», который является ничем иным, как ClassName.
Полный код:
static void Main(string[] args)
{
string line;
List<string> classLst = new List<string>();
List<string> methodLst = new List<string>();
System.IO.StreamReader file = new System.IO.StreamReader(@"C:\Users\******\Desktop\TreeView.txt");
string str = File.ReadAllText(@"C:\Users\*******\Desktop\TreeView.txt");
while ((line = file.ReadLine()) != null)
{
if (line.Contains("class")&&!line.Contains("///"))
{
// for finding class names
int si = line.IndexOf("class");
string followstring = line.Substring(si);
if (!string.IsNullOrEmpty(followstring))
{
string[] spilts = followstring.Split(' ');
if(spilts.Length>1)
{
classLst.Add(spilts[1].ToString());
}
}
}
}
MatchCollection mc = Regex.Matches(str, @"(\s)([A-Z]+[a-z]+[A-Z]*)+\(");
foreach (Match m in mc)
{
methodLst.Add(m.ToString().Substring(1, m.ToString().Length - 2));
//Console.WriteLine(m.ToString().Substring(1, m.ToString().Length - 2));
}
file.Close();
Console.WriteLine("******** classes ***********");
foreach (var item in classLst)
{
Console.WriteLine(item);
}
Console.WriteLine("******** end of classes ***********");
Console.WriteLine("******** methods ***********");
foreach (var item in methodLst)
{
Console.WriteLine(item);
}
Console.WriteLine("******** end of methods ***********");
Console.ReadKey();
}
Здесь я храню имена классов и имена методов в списке. вы можете впоследствии сохранить их в XML или JSON, как описано выше.
Ping us если у вас возникли проблемы.
Приведите пример * output * и что вы хотите с ним сделать. В настоящее время я не могу выбрать между [this] (http://stackoverflow.com/q/6792828/1997232) и [this] (http://stackoverflow.com/q/284324/1997232) дубликат (или просто * широкий * vs * непонятно *). – Sinatr
Зачем идти через ildasm? Кажется, что проще читать двоичный файл напрямую. Сесил - это библиотека, которая может помочь. https://github.com/jbevain/cecil/wiki – adrianm
Выход 'ildasm' не предназначен для чтения программным путем ничем иным, как' ilasm'. Таким образом, безумие. –