【发布时间】:2008-09-24 08:54:46
【问题描述】:
考虑到调试数据文件可用 (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 确实能够获取该信息,但仅限于当前正在执行的调用堆栈范围内。这意味着必须首先调用该方法。我想获得相同的信息,但不调用类型成员。
【问题讨论】:
-
有新的API,不需要再使用PDB阅读器了,看我的回答
-
有没有想过这个问题?答案完全忽略了您的问题的重点,即获取任意成员的文件名和行号。不适用于当前... Harold's 是最接近的,但要求每个潜在成员都使用该属性进行装饰...
标签: c# reflection