2013-03-12 2 views
0

У меня есть требование перечислить методы в файлах cs и перечислить каждый вызов метода внутри метода. Например: у меня есть классесть ли способ поиска по файлу cs

public void method1() 
{ 
    c2.M2(); 
} 

public void method2() 
{ 
    c2.m3(); 
} 

Здесь c2 другой класс и m2 m3 являются методами этого класса. Здесь мне нужно подготовить список c2.m2() и c2.m3(), у меня есть сто или более файлов cs, чтобы просмотреть эти данные.

Есть ли способ, которым я могу эффективно перемещаться по файлам cs и искать вместо того, чтобы их загружать и иметь дело с читателями потоков файлов?

+0

Проверьте пространство имен System.Reflection. –

+0

@PieterGeerkens, может быть, я не правильно сформулировал свой вопрос, через отражение мы можем перечислить методы в классе, но не содержание тела метода, я пытаюсь перечислить вызовы методов внутри метода – ansar

+0

может кто-то ответить на этот вопрос – ansar

ответ

1

два различных способа получить то, что вы ищете:

  • Mono.Cecil смотрит на скомпилированных сборках (как отражение и/или ILDASM) и позволяет просматривать инструкции IL внутри тел методов.
  • Roslyn рассматривает исходные файлы .cs и дает вам дерево разбора.

Любой из них должен позволить вам перечислить вызовы, сделанные внутри каждого метода.

+0

Hi , Используя Mono.Cecil, он имеет лицензионную версию и должен быть куплен, даже если я попытался с образцом кода, я смог извлечь формат C# метода, но не список вызовов методов внутри метода, если бы мне пришлось извлеките код метода, я могу использовать этот, но, к сожалению, у меня есть файлы cs, которые нужно перечислять вызовы метода. Если у вас есть пример кода для перечисления методов внутри метода с использованием Cecil, будет очень полезно – ansar

+0

Я не знаю, откуда у вас возникла идея, что Mono.Cecil нужно купить - это open-source (их веб-сайт не работает) t, похоже, упоминает лицензию, но вы можете увидеть ее в [заголовке лицензии] (https://github.com/jbevain/cecil/blob/master/Mono.Cecil/ArrayType.cs) в исходных файлах, это [Лицензия MIT] (http://opensource.org/licenses/MIT)). Что касается использования Cecil, попробуйте начать с [Cecil FAQ] (http://www.mono-project.com/Cecil:FAQ) и тега ['mono.cecil' в StackOverflow] (http: // stackoverflow .com/вопросы/помеченный/mono.cecil). –

+0

Извините, меня неправильно поняли инструменты между Reflector и Mono.cecil, спасибо за ваш ответ, и я видел код, но не нашел полезного для моего требования. Мне нужно было перечислять методы, называемые внутри методов в классах, но этим Mono .cecil i смог извлечь инструкции. пожалуйста, предоставьте некоторую помощь. Могу ли я получить какую-либо помощь в рамках Nunit? .. – ansar