是否可以确定attributes
a 内部使用了MethodBody
什么?
例如:
void method1()
{
method2();
}
[Attr()]
void method2()
{
// NOP
}
我有什么方法可以查看method1()
并确定它正在使用method2()
或其相关属性吗?
是否可以确定attributes
a 内部使用了MethodBody
什么?
例如:
void method1()
{
method2();
}
[Attr()]
void method2()
{
// NOP
}
我有什么方法可以查看method1()
并确定它正在使用method2()
或其相关属性吗?
您的问题非常令人困惑,尤其是第一部分...
是否可以确定在 MethodBody 中使用了哪些属性?
...因为即使method1() 正在调用method2(),并且method2() 被标记了一个属性,但在任何意义上都没有在method1()中使用该属性。
我有什么方法可以查看 method1() 并确定它正在使用 method2() 或其相关属性吗?
简短的回答是 - 在运行时 - 不。您当然可以手动标记 method1() (以及任何其他方法和任何其他方法),用一些表示他们称为 method2() 的东西,但我认为这不是您要问的。
如果您向我们提供您正在努力实现的目标的背景,它可能会有所帮助。
找出代码中任何地方的method1
调用method2
都很难,而且我认为以前没有做过。我不清楚你为什么要这样做。
在 C# 中仅使用反射是不可能找出method1
调用method2
的,因为您只能获得其通用中间语言(CIL,内部用于表示所有 C#、VB、F# 等指令的语言)的原始二进制表示。
byte[] methodIL = typeof(Program).GetMethod("method1")
.GetMethodBody()
.GetILAsByteArray();
但是,Mono Cecil是一个自定义库,旨在与 .Net 程序集一起使用,并使读取和使用方法的 CIL 变得更加容易。你可以看看它,看看它是否适合你的需要。