.net - 给定一个 .NET 方法,我们如何知道该方法使用了哪些方法、类型等?
问题描述
鉴于:
- .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,后者要复杂得多。
推荐阅读
- javascript - 通过他们的 accountId 使用 Jira Rest API 获取一些用户的团队
- python - 使用 Python:尝试将数组中的随机数保存到 MySQL 数据库
- mysql - findAll() return [object SequelizeInstance:table name] (mysql)
- javascript - 如何理解while循环——链表
- python - docker python:2-alpine 不在詹金斯管道中工作?
- r - 如何为 geom_violin 图中的某些点(例如异常值)使用不同的填充颜色?
- javascript - 如何在javascript中使用getter setter?
- sparql - DBpedia URL 指定 rdfs:label 不起作用
- html - 如何增加容器的高度以使其适合屏幕的整个视口?我对引导程序很陌生
- python - 如何更改 outputtypehandler 中的 datetime.date 类型?