反思以查找方法是否使用任何特定方法

时间:2013-01-18 10:25:26

标签: c# reflection

我有一个dll,它有一些类,这些类有一些方法。 其中一些方法在其中有另一个方法调用。

如何检查类中的方法是否具有特定方法。 我已经对此进行了一些谷歌搜索,我能够在dll中找到类,如下所示:

public List < string > GetClassFromDlLstring(string dllName)
{
    Assembly assemblies = null;
    try
    {
        assemblies = Assembly.LoadFrom(dllName);
    }
    catch (Exception ex)
    {

    }
    var allTypes = assemblies.GetTypes();

    return (from allType in allTypes where allType.IsClass select allType.ToString()).ToList();
}

同样是一种在类中查找所有方法的方法,如下所示:

public List <string> GetAllTMethodClass(string dllName, string className)
{
    var assemblies = Assembly.LoadFrom(dllName);

    Type type = assemblies.GetType(className);

    var temp = new List <string> ();

    try
    {
        MethodInfo[] methods = type.GetMethods();
        //MethodInfo[] methods = type.GetMethods(BindingFlags.Instance);

        foreach(MethodInfo meth in methods)
        {
            if (meth.MemberType == MemberTypes.Method && meth.MemberType != MemberTypes.Property) 
                temp.Add(meth.Name);
        }
    }
    catch (Exception ex)
    {

    }

    return temp;
}

我现在有一个问题,上面的函数也返回属性名称 此外,我想通过功能列表并检查天气功能是否包含特定功能。我怎样才能做到这一点?

编辑1:

我找到了类似的帖子,其链接在下面   - Look if a method is called inside a method using reflection
  - Get types used inside a C# method body

1 个答案:

答案 0 :(得分:4)

你必须研究方法的IL。 IMO,Mono.Cecil是最好的方法。