【问题标题】:How to retrieve all public methods from *.dll如何从 *.dll 中检索所有公共方法
【发布时间】:2011-11-19 06:36:32
【问题描述】:

我有使用 C# 编写的 *.dll,我需要获取该 *.dll 中包含的所有公共方法或类的列表。有没有办法用 C# 以编程方式做到这一点?

【问题讨论】:

    标签: c# .net reflection public-method


    【解决方案1】:

    Assembly.LoadWithPartialName("...") 方法现已弃用,请改用 LoadFile() 方法。

    Assembly a = Assembly.LoadFile("filename.dll");
            Type[] types = a.GetTypes();
            foreach (Type type in types)
            {
                if (!type.IsPublic)
                {
                    continue;
                }
    
                MemberInfo[] members = type.GetMethods();
                foreach (MemberInfo member in members)
                {
                    Console.WriteLine(type.Name + "." + member.Name);
                }
            }
    

    【讨论】:

      【解决方案2】:
      var assembly = // grab assembly
      var types = assembly.GetExportedTypes();
      
      foreach (var type in types) {
          var methods = type.GetMethods(BindingFlags.Public);
      }
      

      GetExportedTypes 将返回程序集中的所有公共类型。您也没有指定是否只需要实例方法、静态方法或两者兼而有之。

      【讨论】:

        【解决方案3】:

        是的,使用Assembly.GetTypes 提取所有类型,然后对每种类型使用反射来迭代公共方法。

        Assembly a = Assembly.LoadWithPartialName("...");
        Type[] types = a.GetTypes();
        foreach (Type type in types)
        {
            if (!type.IsPublic)
            {
                continue;
            }
        
            MemberInfo[] members = type.GetMembers(BindingFlags.Public
                                                  |BindingFlags.Instance
                                                  |BindingFlags.InvokeMethod);
            foreach (MemberInfo member in members)
            {
                Console.WriteLine(type.Name+"."+member.Name);
            }
        }
        

        【讨论】:

          【解决方案4】:

          使用 System.Net.Reflection。反射类允许您在运行时查询 DLL 类型的元数据。

          类似this.GetType().Assembly.GetTypes();

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-08-02
            • 2014-08-07
            • 1970-01-01
            • 2011-12-19
            • 1970-01-01
            • 1970-01-01
            • 2011-09-19
            • 2011-07-12
            相关资源
            最近更新 更多