常规方式是使用
new StackTrace(true).GetFrame(0).GetFileLineNumber();
等一系列操作。
这种操作有个问题是依赖 .pdb文件,在发布时我们一般会去除pdb文件。
如果这时候通过这种方式打印行数,会发现行号为0.
NET 4.5之后可以使用
CallerMemberName ,CallerFilePath 和 CallerLineNumber 特性来在编译期获取相关信息
NET 4.5.3之后在方法内部可以使用使用 nameof 代替 CallerMemberName
private void WriteInfo(
[CallerFilePath]string filePath = "",
[CallerMemberName]string memberName = "",
[CallerLineNumber]int lineNumber = 0)
{
Trace.TraceInformation($"{filePath} {memberName} {lineNumber}");
}
在需要打印的地方以默认参数调用该函数即可
{
// some code
WriteInfo();
// other code
}