考慮到調試數據文件可用(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閱讀器更多,請參閱我的答案 – 2013-04-30 09:01:01