使用StackTrace在Debug模式下获取调用代码所在文件及行信息.net4.0环境
public static T RunApi<T>(this object o, Func<T> run)
{
//StackTrace(true)参数非常重要,必须为true
StackFrame stackFrame =new StackTrace(true).GetFrame(1);
string beforeCallFileName = stackFrame.GetFileName();
string beforeCall= stackFrame.GetMethod().ToString();
int beforeCallFileLine = stackFrame.GetFileLineNumber();
T result = run();
Help.DebugWrite(null, "[{0}] result[{1}] {2} {3} {4} ", Help.LongToString(Marshal.GetLastWin32Error(), "err"), result,beforeCall,beforeCallFileName,beforeCallFileLine);
return result;
}