鉴于:
- .NET 程序集
- 属于程序集内部某个类型的方法(一)
如何找到方法 (2) 引用的 .NET 类型/方法?
我意识到反思在这里没有帮助。但有什么作用?
我能想到的最简单的方法是使用Mono.Cecil。您可以执行以下操作:
using System;
using System.Linq;
using Mono.Cecil;
namespace Test
{
class Program
{
static void Main(string[] args)
{
using var a = AssemblyDefinition.ReadAssembly(typeof(Program).Assembly.Location);
var m = a.MainModule.Types.Single(c => c.Name == "Program").Methods.Single(c => c.Name == "Main");
foreach(var inst in m.Body.Instructions)
{
switch(inst.Operand)
{
case TypeReference tr:
System.Console.WriteLine(tr.FullName);
break;
case MethodReference mr:
System.Console.WriteLine(mr.ReturnType.FullName);
System.Console.WriteLine(mr.DeclaringType.FullName);
// ....
break;
// other member types...
}
}
}
}
}
话虽如此,您也可以使用System.Reflection.Metadata但是,IMO,后者要复杂得多。