I have a simple bit of code (mostly from Jason Haley's
article) that wraps Reflector.exe. I am trying to get the information found in Analysis' pane's "Used By" and "Instantiated By" items. In abbreviated form (no curly braces, etc) the code goes like this:
foreach (IModule module in assembly.Modules)
foreach (ITypeDeclaration typeDeclaration in module.Types)
foreach (IMethodDeclaration methodDeclaration in typeDeclaration.Methods)
IMethodBody methodBody = methodDeclaration.Body as IMethodBody;
foreach (IInstruction instruction in methodBody.Instructions)
/* appropriate code to find call, calli, callvirt, and newobj
statements and for them obtain instruction.value*/
All of this works as expected. The problem arises from the fact that the Target of the statements is not a fully qualified name as illustrated:
Call to : String.get_Length() : Int32
Call to : String.Trim() : String
Instance: StringBuilder..ctor() : Void
Call to : StringLogicalComparer.CompareNumbers(String, String, Int32, Int32&) : Int32
Obviously I need the fully qualified names to filter out calls to the .Net libraries and to distinguish between my own Namespaces, etc.
What I seem to need is a way to obtain the appropriate IMethodReference from Reflector for the Target of the calls and newobj statements.
Is there any hope of getting what I need? It is very frustrating to be so close yet so far away.
Thanks for any help you can give me.