【问题标题】:System.Reflections - CSharp InterpreteurSystem.Reflections - CSharp 解释器
【发布时间】:2015-04-22 13:59:13
【问题描述】:

我正在尝试制作一个读取代码(给定文件)并且必须解析它们的小应用程序。它可能无法编译,因为我提供的代码已经编译。 我需要是我可以使用类似于System.Reflections (FieldInfo, MethodInfo, ...) 的方式读取代码的所有信息。

我曾尝试将该代码编译为 DLL,然后使用:

((Assembly)assembly).GetExportedTypes()[x].GetMethods ();
((Assembly)assembly).GetExportedTypes()[x].GetFields ();

它做了很多工作,但我面临的问题是它给我只有公共声明:(只有公共方法和公共字段) 我无法阅读较少的访问声明(私有、内部、受保护)。

我怎样才能得到这个?

附加信息:我只需要声明的名称和类型

{methodType, methodName, variableType, variableName}

【问题讨论】:

    标签: c# dll .net-assembly system.reflection


    【解决方案1】:

    你需要使用BindingFlags:

    var flags = BindingFlags.Instance | BindingFlags.NonPublic;
    ((Assembly)assembly).GetExportedTypes()[x].GetMethods(flags);
    

    【讨论】:

    • 非常感谢,它工作得很好,这正是我所缺少的,谢谢。
    • 我试过用这个,甚至试过用'var flags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.IgnoreCase;'但是只加载了一些变量,可能是什么问题?
    • @MarkSmethwick 你说的一些是什么意思?你没有得到哪些成员?
    • 对不起,全部修复,这是一个错误,因为在编译 dll 之前,我的代码错误地替换了一些文本,所以它抛出了我没有查到的错误,所以不是全部声明可见
    【解决方案2】:

    您应该将 BindingFlags 传递给您的 GetMethods/GetFields 等调用。 阅读:link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      相关资源
      最近更新 更多