获取项目中的所有公共方法

发布于 2024-10-21 11:39:48 字数 118 浏览 1 评论 0原文

我有一个项目。时间:2019-03-17 标签:c#.net 我想获取项目中所有公共类中所有公共函数的名称。

有没有任何工具或者我可以编写一个程序,将项目 dll 甚至项目目录作为输入,并查找所有公共函数?

i have a project. c# .net
I would like to get names of all public function in all public classes in the project.

is there any tool or can i write a program that take the project dll or even the project directory ,as input ,and find all public function?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

何其悲哀 2024-10-28 11:39:48

这可能符合您的要求:

MethodInfo[] methods = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()).SelectMany(x => x.GetMethods().Where(y => y.IsPublic)).ToArray();

出于好奇,您打算如何处理此信息?

This probably does what you want:

MethodInfo[] methods = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()).SelectMany(x => x.GetMethods().Where(y => y.IsPublic)).ToArray();

Out of curiosity, what are you plans with this info?

束缚m 2024-10-28 11:39:48

您可以使用 System.Reflection.MethodInfo 找到它

假设您有一个在接口中具有以下方法的类:

public interface IFaceOne {
  void MethodA();
}

public interface IFaceTwo {
  void MethodB();
}

public class MyClass: IFaceOne, IFaceTwo {
  public int myIntField;
  public string myStringField;
    private double myDoubleField = 0;


    public double getMyDouble(){
      return myDoubleField;
    }

  public void myMethod(int p1, string p2)
  {
  }

  public int MyProp
  {
    get { return myIntField; }
    set { myIntField = value; }
  }

  public void MethodA() {}
  public void MethodB() {}
}

然后使用以下代码读取所有方法/属性:

public static void Main(string[] args)
{
TheType.MyClass aClass = new TheType.MyClass();

Type t = aClass.GetType();
MethodInfo[] mi = t.GetMethods();
foreach(MethodInfo m in mi)
  Console.WriteLine("Method: {0}", m.Name);
}

您将得到以下结果:
方法:getMyDouble
方法:myMethod
方法:get_MyProp
方法:set_MyProp
方法:方法A
方法:方法B
方法:ToString
方法:等于
方法:获取哈希码
方法:获取类型

You can find it by using System.Reflection.MethodInfo

Lets say you have a class with following methods in interfaces:

public interface IFaceOne {
  void MethodA();
}

public interface IFaceTwo {
  void MethodB();
}

public class MyClass: IFaceOne, IFaceTwo {
  public int myIntField;
  public string myStringField;
    private double myDoubleField = 0;


    public double getMyDouble(){
      return myDoubleField;
    }

  public void myMethod(int p1, string p2)
  {
  }

  public int MyProp
  {
    get { return myIntField; }
    set { myIntField = value; }
  }

  public void MethodA() {}
  public void MethodB() {}
}

Then use following code to read all methods/properties:

public static void Main(string[] args)
{
TheType.MyClass aClass = new TheType.MyClass();

Type t = aClass.GetType();
MethodInfo[] mi = t.GetMethods();
foreach(MethodInfo m in mi)
  Console.WriteLine("Method: {0}", m.Name);
}

You would get following result:
Method: getMyDouble
Method: myMethod
Method: get_MyProp
Method: set_MyProp
Method: MethodA
Method: MethodB
Method: ToString
Method: Equals
Method: GetHashCode
Method: GetType

以歌曲疗慰 2024-10-28 11:39:48

如果您在设计时谈论,那么您正在考虑以下内容之一:

  1. 编写自己的源代码解析器。
  2. 编写您自己的插件或查找第三方 Visual Studio 插件。
  3. 编译然后在 .NET Reflector 等工具中加载 DLL。

如果您正在谈论运行时,那么您正在考虑通过以下一个或多个方法/类使用 .NET 反射:

  1. AppDomain.CurrentDomain.GetAssemblies() // 返回加载的程序集(即DLLs)。
  2. myAssembly.GetTypes() // 返回 Type 的数组。
  3. myType.GetMethods() // 返回 MethodInfo 的数组。

If you're talking about at design-time, then you're looking at one of the following:

  1. Writing your own source code parser.
  2. Writing your own or finding a 3rd party visual studio plugin.
  3. Compiling then loading the DLL in a tool such as .NET Reflector.

If you're talking about at run-time, then you're looking at using .NET reflection, through one or more of the following methods/classes:

  1. AppDomain.CurrentDomain.GetAssemblies() // returns loaded Assemblies (i.e. DLLs).
  2. myAssembly.GetTypes() // returns an array of Type's.
  3. myType.GetMethods() // returns an array of MethodInfo's.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文