Как получить метод, фактически вызываемый инструкцией callvirt IL в FxCop

Я все еще пытаюсь заставить мое правило FxCop работать.

В рамках этого мне нужно работать какие методы вызывает метод. Раньше я использовал CallGraph.CallersFor () (делая это в обратном порядке, что в любом случае является моей конечной целью), однако, похоже, возникла та же проблема, которую я описываю ниже.

В качестве альтернативы использованию класса CallGraph я попытался посетить все вызовы методов для создания словаря на основе этого кода:

public override void VisitMethodCall(MethodCall call)
{
    Method CalledMethod = (call.Callee as MemberBinding).BoundMember as Method;
    // ....
}

Однако оказалось, что если вызываемый метод находится в производном классе, который переопределяет метод базового класса, тогда BoundMember является методом базового класса, а не методом дочернего класса (который будет фактически вызван).

Вопрос: Как можно я получаю метод, который будет вызываться в случае инструкции callvirt IL в FxCop?

7
задан George Duckett 23 June 2011 в 12:49
поделиться