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

时间:2010-02-16 19:56:08

标签: c# reflection

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

2 个答案:

答案 0 :(得分:4)

有关行号的信息通常来自符号文件(或“程序数据库”.pdb)。像FxCop这样的工具使用符号文件将IL链接回源代码。我为您搜索了以下API:http://msdn.microsoft.com/en-us/library/system.diagnostics.symbolstore.aspx

答案 1 :(得分:1)

您应该使用System.Diagnostics Symbol类从.pdb文件中提取信息。这是一个很好的blog就可以了

这样的事可能有用:

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);
    }
}
}