当前位置:  开发笔记 > 编程语言 > 正文

如何获取源文件名和类型成员的行号?

如何解决《如何获取源文件名和类型成员的行号?》经验,为你挑选了1个好方法。

考虑到调试数据文件可用(PDB)并使用System.Reflection或其他类似框架(如Mono.Cecil),如何以编程方式检索源文件名和类型或类型成员的行号声明.

例如,假设您已将此文件编译为程序集:

C:\ MyProject的\ Foo.cs

1:    public class Foo
2:    {
3:       public string SayHello()
4:       {
5:           return "Hello";
6:       }
7:    }

怎么做这样的事情:

MethodInfo methodInfo = typeof(Foo).GetMethod("SayHello");
string sourceFileName = methodInfo.GetSourceFile(); // ?? Does not exist!
int sourceLineNumber = methodInfo.GetLineNumber(); // ?? Does not exist!

sourceFileName将包含"C:\ MyProject\Foo.cs",sourceLineNumber将等于3.

更新:System.Diagnostics.StackFrame确实能够获取该信息,但仅限于当前执行调用堆栈的范围.这意味着必须首先调用该方法.我想获得相同的信息,但不调用类型成员.



1> illegal-immi..:

最新方法:

private static void Log(string text,
                        [CallerFilePath] string file = "",
                        [CallerMemberName] string member = "",
                        [CallerLineNumber] int line = 0)
{
    Console.WriteLine("{0}_{1}({2}): {3}", Path.GetFileName(file), member, line, text);
}

Framework API在运行时填充参数(用特殊属性标记)的新增内容,请参阅我对此SO问题的回答


我认为你从根本上误解了这个问题.您展示了如何获取有关调用者的信息,但问题是询问如何查询任何符号.请参阅Yann Trevin对理查德答案的评论.
推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有