【问题标题】:Does MethodBase provide file name and line number?MethodBase 是否提供文件名和行号?
【发布时间】:2009-07-30 16:51:33
【问题描述】:

我正在尝试为 postsharp 写一个CompileTimeValidate(MethodBase method)。问题是当发生违规时,它只在错误列表中显示描述。 'File' 和 'Line' 列是空的。

我可以使用的唯一信息是应用属性的方法的MethodBase 实例。

有没有办法从MethodBase 对象中获取源文件和行号详细信息?

    public override bool CompileTimeValidate(MethodBase method)
    {
        MessageSource.MessageSink.Write(new Message(SeverityType.Error, "CU0001",
           "MyError", "MyAspectLibrary"));

        return false;
    }

【问题讨论】:

    标签: c# .net reflection compiler-construction postsharp


    【解决方案1】:

    不,没有。 MethodBase 是 .Net 程序集底层元数据的一部分的表示。包括文件和行信息在内的源信息不存储在 DLL 中,因此无法通过反射 API 获得。文件和行信息实际上存储在 PDB 中,您需要通过那些匹配令牌的 API 来查找文件/行信息。

    【讨论】:

    • 有关解析托管 PDB 的更多信息,请参阅此处,您可以按原样使用预制代码:blogs.msdn.com/jmstall/archive/2005/08/25/pdb2xml.aspx
    • PostSharp 确实读取(和重写)PDB 文件,但它们不向老挝公开。问题是 PDB 文件不包含字段、方法、类型的位置……而只包含方法内指令的位置。这对抽象方法、类型、字段等帮助不大,
    猜你喜欢
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2018-12-24
    • 2012-04-12
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多