0

是否可以确定attributesa 内部使用了MethodBody什么?

例如:

void method1()
{
    method2();
}

[Attr()]
void method2()
{
   // NOP
}

我有什么方法可以查看method1()并确定它正在使用method2()或其相关属性吗?

4

2 回答 2

0

您的问题非常令人困惑,尤其是第一部分...

是否可以确定在 MethodBody 中使用了哪些属性?

...因为即使method1() 正在调用method2(),并且method2() 被标记了一个属性,但在任何意义上都没有在method1()中使用该属性。

我有什么方法可以查看 method1() 并确定它正在使用 method2() 或其相关属性吗?

简短的回答是 - 在运行时 - 不。您当然可以手动标记 method1() (以及任何其他方法和任何其他方法),用一些表示他们称为 method2() 的东西,但我认为这不是您要问的。

如果您向我们提供您正在努力实现的目标的背景,它可能会有所帮助。

于 2012-07-18T22:46:10.723 回答
0

找出代码中任何地方的method1调用method2都很难,而且我认为以前没有做过。我不清楚你为什么要这样做。

在 C# 中仅使用反射是不可能找出method1调用method2的,因为您只能获得其通用中间语言(CIL,内部用于表示所有 C#、VB、F# 等指令的语言)的原始二进制表示。

byte[] methodIL = typeof(Program).GetMethod("method1")
    .GetMethodBody()
    .GetILAsByteArray();

但是,Mono Cecil是一个自定义库,旨在与 .Net 程序集一起使用,并使读取和使用方法的 CIL 变得更加容易。你可以看看它,看看它是否适合你的需要。

于 2012-07-18T22:58:52.320 回答