【问题标题】:How to parse an C# assembly and extract every method如何解析 C# 程序集并提取每个方法
【发布时间】:2010-11-17 18:37:07
【问题描述】:

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

我应该从哪里开始实施?

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

【问题讨论】:

  • 是什么让您认为可以从程序集中获取源代码?
  • 我认为在你开始提出这样的问题之前,你需要了解更多关于名为“编译”的非常基本的编程/cs 主题:P。不解释 C#。
  • 嗯,Reflector 做得很好。

标签: c# methods assemblies code-analysis static-code-analysis


【解决方案1】:

程序集不包含源代码。您也许可以提取 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();

【讨论】:

  • 感谢您的回答。我编辑了这个问题,因为我不知道不可能从程序集中提取源代码。
【解决方案2】:

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

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

【讨论】:

  • 感谢您的提示,但是这些 pdb 文件在哪里?
  • 它们位于bin 文件夹中。这些是存储文件名和行的文件。
  • @Roflcoptr - 它们是可选的并且不存在,或者可能存在但仅供开发团队使用(但未部署)
【解决方案3】:

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

请参阅here 以执行此操作。

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

请参阅here 来执行此操作。

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

【讨论】:

  • 感谢您的回答。我编辑了这个问题,因为我不知道不可能从程序集中提取源代码。
【解决方案4】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 2016-11-07
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多