是否可以通过C#中的反射检索文件信息?

是否可以通过C#中的反射检索文件信息?,c#,reflection,C#,Reflection,假设您在C#中有一个MethodInfo或MemberInfo的任何其他子类。是否可以检索它在其中声明的文件名以及声明开始的行号?此信息必须存在于调试模式元数据中的某个位置,因为创建StackTrace实例将提供该信息。我应该查看System.Diagnostics而不是System.Reflection吗?有关行号的信息通常来自符号文件(或“program database”.pdb)。像FxCop这样的工具使用符号文件将IL链接回源代码。我为您搜索了以下API:您应该使用System.Dia

假设您在C#中有一个MethodInfo或MemberInfo的任何其他子类。是否可以检索它在其中声明的文件名以及声明开始的行号?此信息必须存在于调试模式元数据中的某个位置,因为创建StackTrace实例将提供该信息。我应该查看System.Diagnostics而不是System.Reflection吗?

有关行号的信息通常来自符号文件(或“program database”.pdb)。像FxCop这样的工具使用符号文件将IL链接回源代码。我为您搜索了以下API:

您应该使用System.Diagnostics符号类从.pdb文件中提取信息。这是一个很好的例子

类似的方法可能会奏效:

using System;
using System.Diagnostics;

class Foo
{
static void Main()
{
    SmallFunc();
}

static void SmallFunc()
{
    PrintStack();
}
static void PrintStack()
{
    StackTrace st = new StackTrace(true); // true means get line numbers.
    foreach(StackFrame f in st.GetFrames()) {
        Console.Write(f);
    }
}
}