常规方式是使用
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
}
本文介绍.NET 4.5之后引入的新特性:CallerMemberName、CallerFilePath 和 CallerLineNumber,这些特性允许开发者在不依赖.pdb文件的情况下获取当前执行代码的位置信息,包括文件路径、成员名称和行号。
1632

被折叠的 条评论
为什么被折叠?



