Search code examples
c#cilmono.cecildotpeek

Dotpeek ISSUE: unable to decompile the method


Why can't dotpeek decompile the method in the dll?(unable to decompile the method )? // ISSUE: unable to decompile the method.

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

Other decompilers (for example decompiler.com) decompiles it without any problems

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

Setter IL

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

{ .custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = (01 00 00 00 ) .maxstack 4 .locals init (

[0] class [System.Private.CoreLib]System.Action`1<class [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

} // end of method Model::set_ChildModel


Solution

  • So, this was a dotpeek bug. This was fixed after reinstalling