如何确定.Net中幕后发生的事情

时间:2009-10-30 06:09:13

标签: .net-3.5 compiler-construction

我可以使用什么工具或方法来查看像匿名方法或LINQ语句编译的代码?基本上看看幕后发生了什么?

3 个答案:

答案 0 :(得分:5)

Reflector是一种很好的方法。

转到“视图/选项/优化”并选择“无”,以便它不会尝试计算出C#最初的内容。

例如,这个小应用的Main方法:

using System;

class Test    
{
    static void Main()
    {
        string other = "hello";
        Foo (x => new { Before = other + x, After = x + other });
    }

    static void Foo<T>(Func<int, T> func) {}
}

被反编译为:

private static void Main()
{
    <>c__DisplayClass1 class2;
    class2 = new <>c__DisplayClass1();
    class2.other = "hello";
    Foo(new Func<int, <>f__AnonymousType0<string, string>>(class2.<Main>b__0));
    return;
}

然后您会查看<>c__DisplayClass1<>f_AnonymousType0以获取更多详细信息等。

答案 1 :(得分:2)

您可以使用ildasm查看编译器的MSIL输出。

答案 2 :(得分:1)

当我们调用CLR方法时,如果你想进入内部并且在.Net框架中进行什么,还有另外一种方法。

如果您使用的是VS 2008,您甚至可以调试.net框架源代码。为此,您需要安装Microsoft source reference server hotfixes ..

而且Shawn Burke得到了一个很好的帖子(分步指南)来配置这个东西..

试试吧..