代码之家  ›  专栏  ›  技术社区  ›  anon

如何解析C#程序集并提取每个方法

  •  5
  • anon  · 技术社区  · 14 年前

    对于我的应用程序,我希望通过一个程序集进行解析,提取每个方法,并将方法名和源代码存储在一个对象中(我在代码中定义)。

    我应该从哪里开始实施?

    编辑:从答案和注释中我看到,从程序集获取源代码并不那么容易。如果要从不在当前解决方案(visual studio)中的源代码文件获取源代码,应该从何处开始?

    4 回复  |  直到 14 年前
        1
  •  20
  •   Marc Gravell    14 年前

    大会 不包含 源代码。您可能可以提取IL,但是没有像reflector或ildasm这样的工具,这些工具并不是特别有用。

    获得 方法名 ,就像:

        var assembly = Assembly.GetExecutingAssembly();
        var names = (from type in assembly.GetTypes()
                     from method in type.GetMethods(
                       BindingFlags.Public | BindingFlags.NonPublic |
                       BindingFlags.Instance | BindingFlags.Static)
                     select type.FullName + ":" + method.Name).Distinct().ToList();
    
        2
  •  3
  •   Pieter van Ginkel    14 年前

    要检索此调试信息,请使用 Common Compiler Infrastructure: Metadata API 项目。

    这允许您阅读 .pdb 文件(包含调试信息的文件,如源文件和行号)。

        3
  •  2
  •   David Basarab    14 年前

    首先你需要找到所有的类型。

    here 这样做。

    然后您可以找到每种类型的所有方法。

    here 这样做。

    如果你需要一个例子把这一切结合起来让我知道。

        4
  •  0
  •   Brosto    14 年前

    我不知道如何获取源代码,但如果您试图获取有关方法的信息,则应使用反射。

    MethodInfo[] methodInfos = typeof(MyClass).GetMethods(BindingFlags.Public |
                                                      BindingFlags.Static);