【问题标题】:How decompile .net dll to project c# [CompilerGenerated]如何反编译.net dll到项目c# [CompilerGenerated]
【发布时间】:2018-05-19 23:46:48
【问题描述】:

当使用 dotpeek 反编译 dll 时,我得到了这段代码

      [CompilerGenerated]
    private static class <Importuj>o__SiteContainer0
    {
      public static CallSite<Func<CallSite, object, Worksheet>> <>p__Site1;
      public static CallSite<Func<CallSite, object, bool>> <>p__Site2;
      public static CallSite<Func<CallSite, object, object, object>> <>p__Site3;
      public static CallSite<Func<CallSite, object, Range>> <>p__Site4;
      public static CallSite<Func<CallSite, object, bool>> <>p__Site5;
      public static CallSite<ImportExcel.<Importuj>o__SiteContainer0.<>q__SiteDelegate6> <>p__Site7;
      public static CallSite<Func<CallSite, object, object>> <>p__Site8;
      public static CallSite<Func<CallSite, object, Range>> <>p__Site9;

...

}

如何解决这个问题并构建项目?

【问题讨论】:

    标签: c# decompiling


    【解决方案1】:

    首先您需要了解这个编译器生成的类的作用是什么,它是什么,以及它与生成它的代码有何关系。

    在这些调用站点对象的情况下,它们通常用于使用dynamic 值的代码。在不详细介绍的情况下,运行时需要此信息才能发挥与dynamic 一起使用时的魔力。

    例如,

    dynamic something = ...;
    // any code that involves the variable `something` will generate call site information
    

    一般来说,当运行时需要像引用某个特定类型或对象一样引用动态变量时,它会创建一个调用站点对象。它会对每个涉及动态变量的子表达式执行此操作。

    int someInt = something.SomeInt; // some property that returns int
    // CallSite<Func<CallSite, Object, Int32>>
    
    something.SomeMethod();          // some object that has some method `SomeMethod()`
    // CallSite<Func<CallSite, Object, Object>>
    
    SomeValue x = something[123];    // some indexer that takes an int,
                                     // that returns something that might be SomeValue
    // CallSite<Func<CallSite, Object, Int32, Object>>
    //     and CallSite<Func<CallSite, Object, SomeValue>>
    

    知道了这一点,找出这些字段的使用位置,并尝试按照这些模式将涉及该字段的表达式转换为使用dynamic

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      • 2011-07-09
      相关资源
      最近更新 更多