6

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

我应该从哪里开始实施呢?

编辑:从答案和评论中我看到从程序集中获取源代码并不容易。那么如果我想从当前解决方案(Visual Studio)中没有的源代码文件中获取源代码,我应该从哪里开始呢?

4

4 回答 4

21

该程序集不包含源代码。您可能能够提取 IL,但没有反射器或 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();
于 2010-11-17T18:41:59.617 回答
3

要检索此调试信息,请使用通用编译器基础结构:元数据 API项目。

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

于 2010-11-17T18:44:57.417 回答
2

首先,您需要找到所有类型。

请参阅此处以执行此操作。

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

请参阅此处以执行此操作。

如果您需要一个示例将所有内容组合在一起,请告诉我。

于 2010-11-17T18:41:45.360 回答
0

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

MethodInfo[] methodInfos = typeof(MyClass).GetMethods(BindingFlags.Public |
                                                  BindingFlags.Static);
于 2010-11-17T18:42:16.180 回答