1

为什么dotpeek不能反编译dll中的方法?(无法反编译方法 )?// ISSUE: 无法反编译该方法。

public ChildModel ChildModel
{
  get => this.\u003CChildModel\u003Ek__BackingField;
  set
  {
    // ISSUE: unable to decompile the method.
  }
}

其他反编译器(例如decompiler.com)反编译它没有任何问题

            set
        {
            if (_propSubscriptions.TryRemove("ChildModel", out var value2))
            {
                _003CChildModel_003Ek__BackingField.BecameDirty -= value2;
            }
            if (value != null)
            {
                Action<BecameDirtyEventArgs> value3 = delegate(BecameDirtyEventArgs args)
                {
                    OnBecameDirty("ChildModel." + ((args != null) ? args.get_PropertyPath() : null));
                };
                if (_propSubscriptions.TryAdd("ChildModel", value3))
                {
                    value.BecameDirty += value3;
                }
            }
            PropertyModified(ref _003CChildModel_003Ek__BackingField, value, "ChildModel");
        }

二传手

  .method public hidebysig specialname instance void
set_ChildModel(
  class Sqrt.Bws.PersistentStateStorage.Fody.Tests.TestAssembly.ChildModel 'value'
) cil managed

{ .custom 实例无效 [​​netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = (01 00 00 00) .maxstack 4 .locals init (

[0] 类 [System.Private.CoreLib]System.Action`1<类 [Sqrt.Bws.PersistentStateStorage.Contract]Sqrt.Bws.PersistentStateStorage.Contract.BecameDirtyEventArgs> V_0,

  [1] class [System.Private.CoreLib]System.Action`1<class [Sqrt.Bws.PersistentStateStorage.Contract]Sqrt.Bws.PersistentStateStorage.Contract.BecameDirtyEventArgs> V_1,

  [2] bool V_2,

  [3] bool V_3
)

IL_0000: nop
IL_0001: ldarg.0      // this
IL_0002: ldfld        class [System.Collections.Concurrent]System.Collections.Concurrent.ConcurrentDictionary`2<string, class [System.Private.CoreLib]System.Action`1<class [Sqrt.Bws.PersistentStateStorage.Contract]Sqrt.Bws.PersistentStateStorage.Contract.BecameDirtyEventArgs>> Sqrt.Bws.PersistentStateStorage.Fody.Tests.TestAssembly.Model::_propSubscriptions
IL_0007: ldstr        "ChildModel"
IL_000c: ldloca.s     V_0
IL_000e: callvirt     instance bool class [System.Collections.Concurrent]System.Collections.Concurrent.ConcurrentDictionary`2<string, class [System.Private.CoreLib]System.Action`1<class [Sqrt.Bws.PersistentStateStorage.Contract]Sqrt.Bws.PersistentStateStorage.Contract.BecameDirtyEventArgs>>::TryRemove(!0/*string*/, !1/*class [System.Private.CoreLib]System.Action`1<class [Sqrt.Bws.PersistentStateStorage.Contract]Sqrt.Bws.PersistentStateStorage.Contract.BecameDirtyEventArgs>*/&)
IL_0013: stloc.s      V_2
IL_0015: ldloc.s      V_2
IL_0017: brfalse.s    IL_0029
IL_0019: nop
IL_001a: ldarg.0      // this
IL_001b: ldfld        class Sqrt.Bws.PersistentStateStorage.Fody.Tests.TestAssembly.ChildModel Sqrt.Bws.PersistentStateStorage.Fody.Tests.TestAssembly.Model::'<ChildModel>k__BackingField'
IL_0020: ldloc.s      V_0
IL_0022: callvirt     instance void Sqrt.Bws.PersistentStateStorage.Fody.Tests.TestAssembly.ChildModel::remove_BecameDirty(class [mscorlib]System.Action`1<class [Sqrt.Bws.PersistentStateStorage.Contract]Sqrt.Bws.PersistentStateStorage.Contract.BecameDirtyEventArgs>)
IL_0027: nop
IL_0028: nop
IL_0029: ldarg.1      // 'value'
IL_002a: brfalse.s    IL_005c
IL_002c: nop
IL_002d: ldarg.0      // this
IL_002e: ldftn        instance void Sqrt.Bws.PersistentStateStorage.Fody.Tests.TestAssembly.Model::'<ChildModel>NewSubscriptionLambda'(class [Sqrt.Bws.PersistentStateStorage.Contract]Sqrt.Bws.PersistentStateStorage.Contract.BecameDirtyEventArgs)
IL_0034: newobj       instance void class [System.Private.CoreLib]System.Action`1<class [Sqrt.Bws.PersistentStateStorage.Contract]Sqrt.Bws.PersistentStateStorage.Contract.BecameDirtyEventArgs>::.ctor(object, native int)
IL_0039: stloc.1      // V_1
IL_003a: ldarg.0      // this
IL_003b: ldfld        class [System.Collections.Concurrent]System.Collections.Concurrent.ConcurrentDictionary`2<string, class [System.Private.CoreLib]System.Action`1<class [Sqrt.Bws.PersistentStateStorage.Contract]Sqrt.Bws.PersistentStateStorage.Contract.BecameDirtyEventArgs>> Sqrt.Bws.PersistentStateStorage.Fody.Tests.TestAssembly.Model::_propSubscriptions
IL_0040: ldstr        "ChildModel"
IL_0045: ldloc.s      V_1
IL_0047: callvirt     instance bool class [System.Collections.Concurrent]System.Collections.Concurrent.ConcurrentDictionary`2<string, class [System.Private.CoreLib]System.Action`1<class [Sqrt.Bws.PersistentStateStorage.Contract]Sqrt.Bws.PersistentStateStorage.Contract.BecameDirtyEventArgs>>::TryAdd(!0/*string*/, !1/*class [System.Private.CoreLib]System.Action`1<class [Sqrt.Bws.PersistentStateStorage.Contract]Sqrt.Bws.PersistentStateStorage.Contract.BecameDirtyEventArgs>*/)
IL_004c: stloc.3      // V_3
IL_004d: ldloc.3      // V_3
IL_004e: brfalse.s    IL_005b
IL_0050: nop
IL_0051: ldarg.1      // 'value'
IL_0052: ldloc.s      V_1
IL_0054: callvirt     instance void Sqrt.Bws.PersistentStateStorage.Fody.Tests.TestAssembly.ChildModel::add_BecameDirty(class [mscorlib]System.Action`1<class [Sqrt.Bws.PersistentStateStorage.Contract]Sqrt.Bws.PersistentStateStorage.Contract.BecameDirtyEventArgs>)
IL_0059: nop
IL_005a: nop
IL_005b: nop
IL_005c: ldarg.0      // this
IL_005d: ldarg.0      // this
IL_005e: ldflda       class Sqrt.Bws.PersistentStateStorage.Fody.Tests.TestAssembly.ChildModel Sqrt.Bws.PersistentStateStorage.Fody.Tests.TestAssembly.Model::'<ChildModel>k__BackingField'
IL_0063: ldarg.1      // 'value'
IL_0064: ldstr        "ChildModel"
IL_0069: call         instance void Sqrt.Bws.PersistentStateStorage.Fody.Tests.TestAssembly.Model::PropertyModified<class Sqrt.Bws.PersistentStateStorage.Fody.Tests.TestAssembly.ChildModel>(!!0/*class Sqrt.Bws.PersistentStateStorage.Fody.Tests.TestAssembly.ChildModel*/&, !!0/*class Sqrt.Bws.PersistentStateStorage.Fody.Tests.TestAssembly.ChildModel*/, string)
IL_006e: nop
IL_006f: ret

} // 方法结束 Model::set_ChildModel

4

1 回答 1

0

所以,这是一个 dotpeek 错误。重新安装后已修复此问题

于 2021-08-19T08:24:01.793 回答