Um herauszufinden, wo eine Methode MyClass.Foo()
verwendet wird, müssen Sie alle Klassen aller Baugruppen analysieren, die einen Verweis auf die Baugruppe haben, die die MyClass
. Ich habe ein einfaches Beispiel dafür geschrieben, wie dieser Code aussehen kann. In meinem Beispiel habe ich diese Bibliothek (es ist nur eine einzelne .cs-Datei ), geschrieben von Jb Evain:
Ich habe eine kleine Testklasse geschrieben, um sie zu analysieren:
public class TestClass
{
public void Test()
{
Console.WriteLine("Test");
Console.Write(10);
DateTime date = DateTime.Now;
Console.WriteLine(date);
}
}
Und ich habe diesen Code geschrieben, um alle Methoden auszugeben, die in TestClass.Test()
:
MethodBase methodBase = typeof(TestClass).GetMethod("Test");
var instructions = MethodBodyReader.GetInstructions(methodBase);
foreach (Instruction instruction in instructions)
{
MethodInfo methodInfo = instruction.Operand as MethodInfo;
if(methodInfo != null)
{
Type type = methodInfo.DeclaringType;
ParameterInfo[] parameters = methodInfo.GetParameters();
Console.WriteLine("{0}.{1}({2});",
type.FullName,
methodInfo.Name,
String.Join(", ", parameters.Select(p => p.ParameterType.FullName + " " + p.Name).ToArray())
);
}
}
Ich erhielt die folgende Ausgabe:
System.Console.WriteLine(System.String value);
System.Console.Write(System.Int32 value);
System.DateTime.get_Now();
System.Console.WriteLine(System.Object value);
Dieses Beispiel ist natürlich bei weitem nicht vollständig, da es weder ref- noch out-Parameter und auch keine generischen Argumente handhabt. Ich bin sicher, dass ich auch andere Details vergessen habe. Es zeigt nur, dass es machbar ist.