考虑到调试数据文件可用 (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
确实能够获得该信息,但仅限于当前执行的调用堆栈范围内。这意味着必须首先调用该方法。我想获得相同的信息,但不调用类型成员。