C#反射并找到所有引用

给定一个DLL文件,我希望能够找到该DLL文件中对方法的所有调用。我怎样才能做到这一点?

本质上,我该如何以编程方式执行Visual Studio已经完成的工作?

我不想使用.NET

Reflector之类的工具来执行此操作,但是反射很好,可能有必要。

回答:

为了找出使用方法的MyClass.Foo()位置,您必须分析所有对包含的程序集的引用的程序集的所有类MyClass。我写了一个简单的概念证明,以证明这段代码的样子。在我的示例中,我使用了由Jb

Evain编写的该库(只是一个.cs文件):

我写了一点测试课来分析:

public class TestClass

{

public void Test()

{

Console.WriteLine("Test");

Console.Write(10);

DateTime date = DateTime.Now;

Console.WriteLine(date);

}

}

我编写了这段代码,以打印出其中使用的所有方法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())

);

}

}

它给了我以下输出:

System.Console.WriteLine(System.String value);

System.Console.Write(System.Int32 value);

System.DateTime.get_Now();

System.Console.WriteLine(System.Object value);

这个示例显然还远远不够完整,因为它不处理ref和out参数,也不处理通用参数。我相信那也忘记了其他细节。它只是表明可以做到。

以上是 C#反射并找到所有引用 的全部内容, 来源链接: utcz.com/qa/413751.html

回到顶部