.net 在C#中获取函数和文件名

yh2wf1be  于 2023-02-06  发布在  .NET
关注(0)|答案(5)|浏览(158)

当我在一个函数里面的时候,有没有一种方法可以抓取函数名和文件名?我试着像这样到处添加日志文件,并且希望能够在某些函数中复制和粘贴我的日志文件代码行:

public class NewCorrGenerator
{
    public void Start()
    {
        bool rc = true;

        myLogFile.InfoToFileWithTime("NewCorrGenerator - Start", appContext);

        etc.....
    }
}

正如您所看到的,是否有一种方法可以获取字符串中的类名和函数名,并将其输出到myLogFile函数?

zysjyyx4

zysjyyx41#

你可以使用GetCurrentMethod。这将返回一个MethodBase类型的对象。Name属性获取方法的名称。DeclaringType将给予你一个类。这与文件名不同,但是如果你每个文件使用一个类型,它应该是接近的。

zy1mlcev

zy1mlcev2#

可以使用System.Diagnostics.StackTraceSystem.Diagnostics.StackFrame类检索有关当前执行代码的信息:

var trace = new StackTrace(true);
var frame = trace.GetFrame(0);  // current frame
var lineNumber = frame.GetFileLineNumber();
var method = frame.GetMethod().Name;
var className = frame.GetMethod().ReflectedType.Name;
n1bvdmb6

n1bvdmb63#

我知道这是一个老问题,但需求仍然是相关的。因此,为了记录在案,使用新工具的简单方法-CallerMemberNameCallerFilePath

kmynzznz

kmynzznz4#

你需要的是一个拦截器。最流行的框架是PostSharp。它是一个商业产品,可以做你需要的一切。如果你想自己写,试试this article

mklgxw1f

mklgxw1f5#

你可以使用反射来获得你所需要的。下面是一种获得方法名的方法:Retrieving the calling method name from within a method
我会考虑做一些其他的事情-拦截或代码生成,硬编码类/方法名称。如果您最终使用StackTrace,那么用编译器调试指令包围日志代码可能是一个好主意。

相关问题