抛出exception时从stacktrace和frame获取文件名

我试图在抛出exception时获取文件名和源代码编号。 但我一无所获。

class Program { static void Main(string[] args) { try { throw new InvalidOperationException(); } catch (InvalidOperationException exception) { var stackTrace = new StackTrace(exception); var currentFrame = stackTrace.GetFrame(0); var fileName = currentFrame.GetFileName(); var sourceLineNumber = currentFrame.GetFileLineNumber(); Console.WriteLine("File Name: " + fileName); Console.WriteLine("Source line number: " + sourceLineNumber); Console.ReadKey(); } } } 

只有一个框架可用。 所以我在GetFrame(index)使用索引0。

我会编写一个方法并使用CallerFilePathCallerLineNumberCallerMemberName属性

 public void Log([CallerFilePath]string path="",[CallerLineNumber]int lineNumber=0,[CallerMemberName] string memberName="") { Console.WriteLine(path + " " + lineNumber + " " + memberName); } 

用法: Log()

欲了解更多信息: https : //msdn.microsoft.com/en-us/library/hh534540.aspx