Fody/PropertyChanged

Generated IL code is not correct.

Closed this issue · 8 comments

Hi, I found multiple issues with the latest release. I don't know enough about Fody to make the correct fixes and submit them. Hopefully, the information I'm providing will help.

Background: I'm testing Fody/PropertyChanged (not a patron yet) and found a property changed was triggering twice (due to bindable property). So I decided to create a simple example and look at the IL code to see what's generated (I'm using dotPeek).

Summary of issues. -- (Forgive the property names)

  • IsChanged is set to true even though [DoNetSetChanged] is set on the property (See prop Bla3)
  • [DoNotNotify] does not work if an IsChanged property exists. The OnPropertyChanged code is generated. (See property Bla2)
  • [DoNotCheckEqualityAttribute] breaks when IsChanged property exists. (See prop Bla4)
  • Call to IsChanged = true is done twice (See bla5 and bla4)
  • Finally, unrelated to these issues. the following code in PropertyChanged.Fody/InjectOnPropertyNameChangedConfig.cs needs to change from
    InjectOnPropertyNameChanged = bool.Parse((string) value);
    to
    InjectOnPropertyNameChanged = bool.Parse(value.Value);
    otherwise, setting it to false never works. An issue from 2014 said that it's not working and it hasn't been fixed since.

here is my sample code with the various properties turned on

public bool IsChanged { get; set; } [DoNotNotify][DoNotSetChanged][DoNotCheckEqualityAttribute]public bool bla1 { get; set; } [DoNotNotify]public bool bla2 { get; set; } [DoNotSetChanged]public bool bla3 { get; set; } public bool bla5 { get; set; } [DoNotCheckEqualityAttribute] public bool bla4 { get; set; }

Here is the output from dotPeek.

` public bool bla1
{
get
{
return this.\u003Cbla1\u003Ek__BackingField;
}
set
{
if (this.\u003Cbla1\u003Ek__BackingField == value)
return;
this.\u003Cbla1\u003Ek__BackingField = value;
this.IsChanged = true;
this.OnPropertyChanged(nameof (bla1));
}
}

public bool bla2
{
  get
  {
    return this.\u003Cbla2\u003Ek__BackingField;
  }
  set
  {
    if (this.\u003Cbla2\u003Ek__BackingField == value)
      return;
    this.\u003Cbla2\u003Ek__BackingField = value;
    this.IsChanged = true;
    this.OnPropertyChanged(nameof (bla2));
  }
}

public bool bla3
{
  get
  {
    return this.\u003Cbla3\u003Ek__BackingField;
  }
  set
  {
    if (this.\u003Cbla3\u003Ek__BackingField == value)
      return;
    this.\u003Cbla3\u003Ek__BackingField = value;
    this.IsChanged = true;
    this.OnPropertyChanged(nameof (bla3));
  }
}

public bool bla5
{
  get
  {
    return this.\u003Cbla5\u003Ek__BackingField;
  }
  set
  {
    if (this.\u003Cbla5\u003Ek__BackingField == value)
      return;
    this.\u003Cbla5\u003Ek__BackingField = value;
    this.IsChanged = true;
    this.IsChanged = true;
    this.OnPropertyChanged(nameof (bla5));
  }
}

public bool bla4
{
  get
  {
    return this.\u003Cbla4\u003Ek__BackingField;
  }
  set
  {
    if (this.\u003Cbla4\u003Ek__BackingField == value)
      return;
    this.\u003Cbla4\u003Ek__BackingField = value;
    this.IsChanged = true;
    this.IsChanged = true;
    this.OnPropertyChanged(nameof (bla4));
  }
}`

`
// Type: KinBase.Cross.Controls.KinImageView
// Assembly: KinBase.Cross, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
// MVID: 1133F619-37C2-464F-AA01-71A4B50889EA
// Location: C:\Users\safwa\Downloads\KinBase.Cross.dll
// Sequence point data from decompiler

.class public auto ansi beforefieldinit
KinBase.Cross.Controls.KinImageView
extends [Xamarin.Forms.Core]Xamarin.Forms.View
{

.field private class [KinBoxRest]KinboxRest.BaseMedia/SIZE 'k__BackingField'
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )

.field private int32 'k__BackingField'
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )

.field public static initonly class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty PhotoProperty

.field public static initonly class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty MediaProperty

.field private bool 'k__BackingField'
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )

.field private bool 'k__BackingField'
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )

.field private bool 'k__BackingField'
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )

.field private bool 'k__BackingField'
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )

.field private bool 'k__BackingField'
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )

.field private bool 'k__BackingField'
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )

.field private bool 'k__BackingField'
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )

.field public static initonly class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty UrlProperty

.field private bool _bozoooo

.field private bool _baaa

.method public hidebysig specialname instance class [KinBoxRest]KinboxRest.BaseMedia/SIZE
get_PhotoSize() cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 8

// [25 9 - 25 58]
IL_0000: ldarg.0      // this
IL_0001: ldfld        class [KinBoxRest]KinboxRest.BaseMedia/SIZE KinBase.Cross.Controls.KinImageView::'<PhotoSize>k__BackingField'
IL_0006: ret

} // end of method KinImageView::get_PhotoSize

.method public hidebysig specialname instance void
set_PhotoSize(
class [KinBoxRest]KinboxRest.BaseMedia/SIZE 'value'
) cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 2

// [29 9 - 29 64]
IL_0000: ldarg.0      // this
IL_0001: ldfld        class [KinBoxRest]KinboxRest.BaseMedia/SIZE KinBase.Cross.Controls.KinImageView::'<PhotoSize>k__BackingField'
IL_0006: ldarg.1      // 'value'
IL_0007: ceq
IL_0009: brfalse.s    IL_000d

IL_000b: br.s         IL_002e
IL_000d: nop

// [31 9 - 31 58]
IL_000e: ldarg.0      // this
IL_000f: ldarg.1      // 'value'
IL_0010: stfld        class [KinBoxRest]KinboxRest.BaseMedia/SIZE KinBase.Cross.Controls.KinImageView::'<PhotoSize>k__BackingField'

// [32 9 - 32 30]
IL_0015: ldarg.0      // this
IL_0016: ldc.i4.1
IL_0017: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [33 9 - 33 30]
IL_001c: ldarg.0      // this
IL_001d: ldc.i4.1
IL_001e: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [34 9 - 34 51]
IL_0023: ldarg.0      // this
IL_0024: ldstr        "PhotoSize"
IL_0029: callvirt     instance void [Xamarin.Forms.Core]Xamarin.Forms.View::OnPropertyChanged(string)
IL_002e: nop

// [30 11 - 30 18]
IL_002f: ret

} // end of method KinImageView::set_PhotoSize

.method public hidebysig specialname instance int32
get_CacheForXDays() cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 8

// [42 9 - 42 62]
IL_0000: ldarg.0      // this
IL_0001: ldfld        int32 KinBase.Cross.Controls.KinImageView::'<CacheForXDays>k__BackingField'
IL_0006: ret

} // end of method KinImageView::get_CacheForXDays

.method public hidebysig specialname instance void
set_CacheForXDays(
int32 'value'
) cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 2

// [46 9 - 46 68]
IL_0000: ldarg.0      // this
IL_0001: ldfld        int32 KinBase.Cross.Controls.KinImageView::'<CacheForXDays>k__BackingField'
IL_0006: ldarg.1      // 'value'
IL_0007: ceq
IL_0009: brfalse.s    IL_000d

IL_000b: br.s         IL_002e
IL_000d: nop

// [48 9 - 48 62]
IL_000e: ldarg.0      // this
IL_000f: ldarg.1      // 'value'
IL_0010: stfld        int32 KinBase.Cross.Controls.KinImageView::'<CacheForXDays>k__BackingField'

// [49 9 - 49 30]
IL_0015: ldarg.0      // this
IL_0016: ldc.i4.1
IL_0017: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [50 9 - 50 30]
IL_001c: ldarg.0      // this
IL_001d: ldc.i4.1
IL_001e: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [51 9 - 51 55]
IL_0023: ldarg.0      // this
IL_0024: ldstr        "CacheForXDays"
IL_0029: callvirt     instance void [Xamarin.Forms.Core]Xamarin.Forms.View::OnPropertyChanged(string)
IL_002e: nop

// [47 11 - 47 18]
IL_002f: ret

} // end of method KinImageView::set_CacheForXDays

.method public hidebysig specialname instance class [KinBoxRest]KinboxRest.SystemPhoto
get_Photo() cil managed
{
.maxstack 8

// [59 9 - 59 91]
IL_0000: ldarg.0      // this
IL_0001: ldsfld       class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty KinBase.Cross.Controls.KinImageView::PhotoProperty
IL_0006: call         instance object [Xamarin.Forms.Core]Xamarin.Forms.BindableObject::GetValue(class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty)
IL_000b: castclass    [KinBoxRest]KinboxRest.SystemPhoto
IL_0010: ret

} // end of method KinImageView::get_Photo

.method public hidebysig specialname instance void
set_Photo(
class [KinBoxRest]KinboxRest.SystemPhoto 'value'
) cil managed
{
.maxstack 3

// [63 9 - 63 65]
IL_0000: ldarg.0      // this
IL_0001: call         instance class [KinBoxRest]KinboxRest.SystemPhoto KinBase.Cross.Controls.KinImageView::get_Photo()
IL_0006: ldarg.1      // 'value'
IL_0007: call         bool [netstandard]System.Object::Equals(object, object)
IL_000c: brfalse.s    IL_0010

IL_000e: br.s         IL_0030
IL_0010: nop

// [65 11 - 65 87]
IL_0011: ldarg.0      // this
IL_0012: ldsfld       class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty KinBase.Cross.Controls.KinImageView::PhotoProperty
IL_0017: ldarg.1      // 'value'
IL_0018: call         instance void [Xamarin.Forms.Core]Xamarin.Forms.BindableObject::SetValue(class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty, object)
IL_001d: nop

// [66 11 - 66 32]
IL_001e: ldarg.0      // this
IL_001f: ldc.i4.1
IL_0020: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [67 11 - 67 49]
IL_0025: ldarg.0      // this
IL_0026: ldstr        "Photo"
IL_002b: callvirt     instance void [Xamarin.Forms.Core]Xamarin.Forms.View::OnPropertyChanged(string)
IL_0030: nop

// [69 9 - 69 30]
IL_0031: ldarg.0      // this
IL_0032: ldc.i4.1
IL_0033: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)
IL_0038: ret

} // end of method KinImageView::set_Photo

.method public hidebysig specialname instance class [KinBoxRest]KinboxRest.Media
get_Media() cil managed
{
.maxstack 8

// [77 9 - 77 85]
IL_0000: ldarg.0      // this
IL_0001: ldsfld       class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty KinBase.Cross.Controls.KinImageView::MediaProperty
IL_0006: call         instance object [Xamarin.Forms.Core]Xamarin.Forms.BindableObject::GetValue(class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty)
IL_000b: castclass    [KinBoxRest]KinboxRest.Media
IL_0010: ret

} // end of method KinImageView::get_Media

.method public hidebysig specialname instance void
set_Media(
class [KinBoxRest]KinboxRest.Media 'value'
) cil managed
{
.maxstack 3

// [81 9 - 81 65]
IL_0000: ldarg.0      // this
IL_0001: call         instance class [KinBoxRest]KinboxRest.Media KinBase.Cross.Controls.KinImageView::get_Media()
IL_0006: ldarg.1      // 'value'
IL_0007: call         bool [netstandard]System.Object::Equals(object, object)
IL_000c: brfalse.s    IL_0010

IL_000e: br.s         IL_0030
IL_0010: nop

// [83 11 - 83 87]
IL_0011: ldarg.0      // this
IL_0012: ldsfld       class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty KinBase.Cross.Controls.KinImageView::MediaProperty
IL_0017: ldarg.1      // 'value'
IL_0018: call         instance void [Xamarin.Forms.Core]Xamarin.Forms.BindableObject::SetValue(class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty, object)
IL_001d: nop

// [84 11 - 84 32]
IL_001e: ldarg.0      // this
IL_001f: ldc.i4.1
IL_0020: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [85 11 - 85 49]
IL_0025: ldarg.0      // this
IL_0026: ldstr        "Media"
IL_002b: callvirt     instance void [Xamarin.Forms.Core]Xamarin.Forms.View::OnPropertyChanged(string)
IL_0030: nop

// [87 9 - 87 30]
IL_0031: ldarg.0      // this
IL_0032: ldc.i4.1
IL_0033: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)
IL_0038: ret

} // end of method KinImageView::set_Media

.method public hidebysig specialname instance bool
get_Bozo() cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 8

// [95 9 - 95 53]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::'<Bozo>k__BackingField'
IL_0006: ret

} // end of method KinImageView::get_Bozo

.method public hidebysig specialname instance void
set_Bozo(
bool 'value'
) cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 2

// [99 9 - 99 59]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::'<Bozo>k__BackingField'
IL_0006: ldarg.1      // 'value'
IL_0007: ceq
IL_0009: brfalse.s    IL_000d

IL_000b: br.s         IL_002e
IL_000d: nop

// [101 9 - 101 53]
IL_000e: ldarg.0      // this
IL_000f: ldarg.1      // 'value'
IL_0010: stfld        bool KinBase.Cross.Controls.KinImageView::'<Bozo>k__BackingField'

// [102 9 - 102 30]
IL_0015: ldarg.0      // this
IL_0016: ldc.i4.1
IL_0017: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [103 9 - 103 30]
IL_001c: ldarg.0      // this
IL_001d: ldc.i4.1
IL_001e: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [104 9 - 104 46]
IL_0023: ldarg.0      // this
IL_0024: ldstr        "Bozo"
IL_0029: callvirt     instance void [Xamarin.Forms.Core]Xamarin.Forms.View::OnPropertyChanged(string)
IL_002e: nop

// [100 11 - 100 18]
IL_002f: ret

} // end of method KinImageView::set_Bozo

.method public hidebysig specialname instance bool
get_baaa() cil managed
{
.maxstack 8

// [112 9 - 112 27]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::_baaa
IL_0006: ret

} // end of method KinImageView::get_baaa

.method public hidebysig specialname instance void
set_baaa(
bool 'value'
) cil managed
{
.maxstack 2

// [116 9 - 116 33]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::_baaa
IL_0006: ldarg.1      // 'value'
IL_0007: ceq
IL_0009: brfalse.s    IL_000d

IL_000b: br.s         IL_002e
IL_000d: nop

// [118 9 - 118 27]
IL_000e: ldarg.0      // this
IL_000f: ldarg.1      // 'value'
IL_0010: stfld        bool KinBase.Cross.Controls.KinImageView::_baaa

// [119 9 - 119 30]
IL_0015: ldarg.0      // this
IL_0016: ldc.i4.1
IL_0017: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [120 9 - 120 30]
IL_001c: ldarg.0      // this
IL_001d: ldc.i4.1
IL_001e: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [121 9 - 121 46]
IL_0023: ldarg.0      // this
IL_0024: ldstr        "baaa"
IL_0029: callvirt     instance void [Xamarin.Forms.Core]Xamarin.Forms.View::OnPropertyChanged(string)
IL_002e: nop

// [117 11 - 117 18]
IL_002f: ret

} // end of method KinImageView::set_baaa

.method public hidebysig specialname instance bool
get_IsChanged() cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 8

// [129 9 - 129 58]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::'<IsChanged>k__BackingField'
IL_0006: ret

} // end of method KinImageView::get_IsChanged

.method public hidebysig specialname instance void
set_IsChanged(
bool 'value'
) cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 2

// [133 9 - 133 64]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::'<IsChanged>k__BackingField'
IL_0006: ldarg.1      // 'value'
IL_0007: ceq
IL_0009: brfalse.s    IL_000d

IL_000b: br.s         IL_0020
IL_000d: nop

// [135 9 - 135 58]
IL_000e: ldarg.0      // this
IL_000f: ldarg.1      // 'value'
IL_0010: stfld        bool KinBase.Cross.Controls.KinImageView::'<IsChanged>k__BackingField'

// [136 9 - 136 51]
IL_0015: ldarg.0      // this
IL_0016: ldstr        "IsChanged"
IL_001b: callvirt     instance void [Xamarin.Forms.Core]Xamarin.Forms.View::OnPropertyChanged(string)
IL_0020: nop

// [134 11 - 134 18]
IL_0021: ret

} // end of method KinImageView::set_IsChanged

.method public hidebysig specialname instance bool
get_Bozoooo() cil managed
{
.maxstack 8

// [144 9 - 144 30]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::_bozoooo
IL_0006: ret

} // end of method KinImageView::get_Bozoooo

.method public hidebysig specialname instance void
set_Bozoooo(
bool 'value'
) cil managed
{
.maxstack 2

// [148 9 - 148 36]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::_bozoooo
IL_0006: ldarg.1      // 'value'
IL_0007: ceq
IL_0009: brfalse.s    IL_000d

IL_000b: br.s         IL_0042
IL_000d: nop

// [150 9 - 150 30]
IL_000e: ldarg.0      // this
IL_000f: ldarg.1      // 'value'
IL_0010: stfld        bool KinBase.Cross.Controls.KinImageView::_bozoooo

// [151 9 - 151 30]
IL_0015: ldarg.0      // this
IL_0016: ldc.i4.1
IL_0017: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [152 9 - 152 30]
IL_001c: ldarg.0      // this
IL_001d: ldc.i4.1
IL_001e: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [153 9 - 153 36]
IL_0023: ldstr        "MyCode"
IL_0028: call         void [netstandard]System.Console::WriteLine(string)

// [154 9 - 154 68]
IL_002d: ldarg.0      // this
IL_002e: ldstr        "Bozoooo"
IL_0033: callvirt     instance void [Xamarin.Forms.Core]Xamarin.Forms.BindableObject::OnPropertyChanged(string)

// [155 9 - 155 40]
IL_0038: ldstr        "MyCode End"
IL_003d: call         void [netstandard]System.Console::WriteLine(string)
IL_0042: nop

// [149 11 - 149 18]
IL_0043: ret

} // end of method KinImageView::set_Bozoooo

.method public hidebysig specialname instance bool
get_bla1() cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 8

// [163 9 - 163 53]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::'<bla1>k__BackingField'
IL_0006: ret

} // end of method KinImageView::get_bla1

.method public hidebysig specialname instance void
set_bla1(
bool 'value'
) cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 2

// [167 9 - 167 59]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::'<bla1>k__BackingField'
IL_0006: ldarg.1      // 'value'
IL_0007: ceq
IL_0009: brfalse.s    IL_000c

// [168 11 - 168 18]
IL_000b: ret
IL_000c: nop

// [169 9 - 169 53]
IL_000d: ldarg.0      // this
IL_000e: ldarg.1      // 'value'
IL_000f: stfld        bool KinBase.Cross.Controls.KinImageView::'<bla1>k__BackingField'

// [170 9 - 170 30]
IL_0014: ldarg.0      // this
IL_0015: ldc.i4.1
IL_0016: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [171 9 - 171 46]
IL_001b: ldarg.0      // this
IL_001c: ldstr        "bla1"
IL_0021: callvirt     instance void [Xamarin.Forms.Core]Xamarin.Forms.View::OnPropertyChanged(string)
IL_0026: nop
IL_0027: ret

} // end of method KinImageView::set_bla1

.method public hidebysig specialname instance bool
get_bla2() cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 8

// [179 9 - 179 53]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::'<bla2>k__BackingField'
IL_0006: ret

} // end of method KinImageView::get_bla2

.method public hidebysig specialname instance void
set_bla2(
bool 'value'
) cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 2

// [183 9 - 183 59]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::'<bla2>k__BackingField'
IL_0006: ldarg.1      // 'value'
IL_0007: ceq
IL_0009: brfalse.s    IL_000c

// [184 11 - 184 18]
IL_000b: ret
IL_000c: nop

// [185 9 - 185 53]
IL_000d: ldarg.0      // this
IL_000e: ldarg.1      // 'value'
IL_000f: stfld        bool KinBase.Cross.Controls.KinImageView::'<bla2>k__BackingField'

// [186 9 - 186 30]
IL_0014: ldarg.0      // this
IL_0015: ldc.i4.1
IL_0016: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [187 9 - 187 46]
IL_001b: ldarg.0      // this
IL_001c: ldstr        "bla2"
IL_0021: callvirt     instance void [Xamarin.Forms.Core]Xamarin.Forms.View::OnPropertyChanged(string)
IL_0026: nop
IL_0027: ret

} // end of method KinImageView::set_bla2

.method public hidebysig specialname instance bool
get_bla3() cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 8

// [195 9 - 195 53]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::'<bla3>k__BackingField'
IL_0006: ret

} // end of method KinImageView::get_bla3

.method public hidebysig specialname instance void
set_bla3(
bool 'value'
) cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 2

// [199 9 - 199 59]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::'<bla3>k__BackingField'
IL_0006: ldarg.1      // 'value'
IL_0007: ceq
IL_0009: brfalse.s    IL_000d

IL_000b: br.s         IL_0027
IL_000d: nop

// [201 9 - 201 53]
IL_000e: ldarg.0      // this
IL_000f: ldarg.1      // 'value'
IL_0010: stfld        bool KinBase.Cross.Controls.KinImageView::'<bla3>k__BackingField'

// [202 9 - 202 30]
IL_0015: ldarg.0      // this
IL_0016: ldc.i4.1
IL_0017: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [203 9 - 203 46]
IL_001c: ldarg.0      // this
IL_001d: ldstr        "bla3"
IL_0022: callvirt     instance void [Xamarin.Forms.Core]Xamarin.Forms.View::OnPropertyChanged(string)
IL_0027: nop

// [200 11 - 200 18]
IL_0028: ret

} // end of method KinImageView::set_bla3

.method public hidebysig specialname instance bool
get_bla5() cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 8

// [211 9 - 211 53]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::'<bla5>k__BackingField'
IL_0006: ret

} // end of method KinImageView::get_bla5

.method public hidebysig specialname instance void
set_bla5(
bool 'value'
) cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 2

// [215 9 - 215 59]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::'<bla5>k__BackingField'
IL_0006: ldarg.1      // 'value'
IL_0007: ceq
IL_0009: brfalse.s    IL_000d

IL_000b: br.s         IL_002e
IL_000d: nop

// [217 9 - 217 53]
IL_000e: ldarg.0      // this
IL_000f: ldarg.1      // 'value'
IL_0010: stfld        bool KinBase.Cross.Controls.KinImageView::'<bla5>k__BackingField'

// [218 9 - 218 30]
IL_0015: ldarg.0      // this
IL_0016: ldc.i4.1
IL_0017: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [219 9 - 219 30]
IL_001c: ldarg.0      // this
IL_001d: ldc.i4.1
IL_001e: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [220 9 - 220 46]
IL_0023: ldarg.0      // this
IL_0024: ldstr        "bla5"
IL_0029: callvirt     instance void [Xamarin.Forms.Core]Xamarin.Forms.View::OnPropertyChanged(string)
IL_002e: nop

// [216 11 - 216 18]
IL_002f: ret

} // end of method KinImageView::set_bla5

.method public hidebysig specialname instance bool
get_bla4() cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 8

// [228 9 - 228 53]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::'<bla4>k__BackingField'
IL_0006: ret

} // end of method KinImageView::get_bla4

.method public hidebysig specialname instance void
set_bla4(
bool 'value'
) cil managed
{
.custom instance void [netstandard]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
= (01 00 00 00 )
.maxstack 2

// [232 9 - 232 59]
IL_0000: ldarg.0      // this
IL_0001: ldfld        bool KinBase.Cross.Controls.KinImageView::'<bla4>k__BackingField'
IL_0006: ldarg.1      // 'value'
IL_0007: ceq
IL_0009: brfalse.s    IL_000c

// [233 11 - 233 18]
IL_000b: ret
IL_000c: nop

// [234 9 - 234 53]
IL_000d: ldarg.0      // this
IL_000e: ldarg.1      // 'value'
IL_000f: stfld        bool KinBase.Cross.Controls.KinImageView::'<bla4>k__BackingField'

// [235 9 - 235 30]
IL_0014: ldarg.0      // this
IL_0015: ldc.i4.1
IL_0016: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [236 9 - 236 30]
IL_001b: ldarg.0      // this
IL_001c: ldc.i4.1
IL_001d: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [237 9 - 237 46]
IL_0022: ldarg.0      // this
IL_0023: ldstr        "bla4"
IL_0028: callvirt     instance void [Xamarin.Forms.Core]Xamarin.Forms.View::OnPropertyChanged(string)
IL_002d: nop
IL_002e: ret

} // end of method KinImageView::set_bla4

.method public hidebysig specialname instance string
get_Url() cil managed
{
.maxstack 8

// [245 9 - 245 84]
IL_0000: ldarg.0      // this
IL_0001: ldsfld       class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty KinBase.Cross.Controls.KinImageView::UrlProperty
IL_0006: call         instance object [Xamarin.Forms.Core]Xamarin.Forms.BindableObject::GetValue(class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty)
IL_000b: castclass    [netstandard]System.String
IL_0010: ret

} // end of method KinImageView::get_Url

.method public hidebysig specialname instance void
set_Url(
string 'value'
) cil managed
{
.maxstack 3

// [249 9 - 249 71]
IL_0000: ldarg.0      // this
IL_0001: call         instance string KinBase.Cross.Controls.KinImageView::get_Url()
IL_0006: ldarg.1      // 'value'
IL_0007: ldc.i4.4
IL_0008: call         bool [netstandard]System.String::Equals(string, string, valuetype [netstandard]System.StringComparison)
IL_000d: brfalse.s    IL_0011

IL_000f: br.s         IL_0031
IL_0011: nop

// [251 11 - 251 85]
IL_0012: ldarg.0      // this
IL_0013: ldsfld       class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty KinBase.Cross.Controls.KinImageView::UrlProperty
IL_0018: ldarg.1      // 'value'
IL_0019: call         instance void [Xamarin.Forms.Core]Xamarin.Forms.BindableObject::SetValue(class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty, object)
IL_001e: nop

// [252 11 - 252 32]
IL_001f: ldarg.0      // this
IL_0020: ldc.i4.1
IL_0021: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)

// [253 11 - 253 47]
IL_0026: ldarg.0      // this
IL_0027: ldstr        "Url"
IL_002c: callvirt     instance void [Xamarin.Forms.Core]Xamarin.Forms.View::OnPropertyChanged(string)
IL_0031: nop

// [255 9 - 255 30]
IL_0032: ldarg.0      // this
IL_0033: ldc.i4.1
IL_0034: callvirt     instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)
IL_0039: ret

} // end of method KinImageView::set_Url

.method public hidebysig specialname instance void
set_PhotoPropertyBinding(
class [Xamarin.Forms.Core]Xamarin.Forms.BindingBase 'value'
) cil managed
{
.maxstack 8

// [263 9 - 263 78]
IL_0000: ldarg.0      // this
IL_0001: ldsfld       class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty KinBase.Cross.Controls.KinImageView::PhotoProperty
IL_0006: ldarg.1      // 'value'
IL_0007: call         instance void [Xamarin.Forms.Core]Xamarin.Forms.BindableObject::SetBinding(class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty, class [Xamarin.Forms.Core]Xamarin.Forms.BindingBase)
IL_000c: ret

} // end of method KinImageView::set_PhotoPropertyBinding

.method public hidebysig specialname instance void
set_MediaPropertyBinding(
class [Xamarin.Forms.Core]Xamarin.Forms.BindingBase 'value'
) cil managed
{
.maxstack 8

// [271 9 - 271 78]
IL_0000: ldarg.0      // this
IL_0001: ldsfld       class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty KinBase.Cross.Controls.KinImageView::MediaProperty
IL_0006: ldarg.1      // 'value'
IL_0007: call         instance void [Xamarin.Forms.Core]Xamarin.Forms.BindableObject::SetBinding(class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty, class [Xamarin.Forms.Core]Xamarin.Forms.BindingBase)
IL_000c: ret

} // end of method KinImageView::set_MediaPropertyBinding

.method public hidebysig specialname instance void
set_UrlPropertyBinding(
class [Xamarin.Forms.Core]Xamarin.Forms.BindingBase 'value'
) cil managed
{
.maxstack 8

// [279 9 - 279 76]
IL_0000: ldarg.0      // this
IL_0001: ldsfld       class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty KinBase.Cross.Controls.KinImageView::UrlProperty
IL_0006: ldarg.1      // 'value'
IL_0007: call         instance void [Xamarin.Forms.Core]Xamarin.Forms.BindableObject::SetBinding(class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty, class [Xamarin.Forms.Core]Xamarin.Forms.BindingBase)
IL_000c: ret

} // end of method KinImageView::set_UrlPropertyBinding

.method public hidebysig specialname rtspecialname instance void
.ctor() cil managed
{
.maxstack 8

IL_0000: ldarg.0      // this
IL_0001: ldc.i4.s     30 // 0x1e
IL_0003: stfld        int32 KinBase.Cross.Controls.KinImageView::'<CacheForXDays>k__BackingField'

// [285 7 - 285 24]
IL_0008: ldarg.0      // this
IL_0009: call         instance void [Xamarin.Forms.Core]Xamarin.Forms.View::.ctor()
IL_000e: ret

} // end of method KinImageView::.ctor

.method private hidebysig static specialname rtspecialname void
.cctor() cil managed
{
.maxstack 10

// [15 5 - 15 435]
IL_0000: ldstr        "Photo"
IL_0005: ldtoken      [KinBoxRest]KinboxRest.SystemPhoto
IL_000a: call         class [netstandard]System.Type [netstandard]System.Type::GetTypeFromHandle(valuetype [netstandard]System.RuntimeTypeHandle)
IL_000f: ldtoken      KinBase.Cross.Controls.KinImageView
IL_0014: call         class [netstandard]System.Type [netstandard]System.Type::GetTypeFromHandle(valuetype [netstandard]System.RuntimeTypeHandle)
IL_0019: ldnull
IL_001a: ldc.i4.1
IL_001b: ldnull
IL_001c: ldnull
IL_001d: ldnull
IL_001e: ldnull
IL_001f: ldnull
IL_0020: call         class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty::Create(string, class [netstandard]System.Type, class [netstandard]System.Type, object, class [Xamarin.Forms.Core]Xamarin.Forms.BindingMode, class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty/ValidateValueDelegate, class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty/BindingPropertyChangedDelegate, class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty/BindingPropertyChangingDelegate, class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty/CoerceValueDelegate, class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty/CreateDefaultValueDelegate)
IL_0025: stsfld       class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty KinBase.Cross.Controls.KinImageView::PhotoProperty

// [16 5 - 16 429]
IL_002a: ldstr        "Media"
IL_002f: ldtoken      [KinBoxRest]KinboxRest.Media
IL_0034: call         class [netstandard]System.Type [netstandard]System.Type::GetTypeFromHandle(valuetype [netstandard]System.RuntimeTypeHandle)
IL_0039: ldtoken      KinBase.Cross.Controls.KinImageView
IL_003e: call         class [netstandard]System.Type [netstandard]System.Type::GetTypeFromHandle(valuetype [netstandard]System.RuntimeTypeHandle)
IL_0043: ldnull
IL_0044: ldc.i4.1
IL_0045: ldnull
IL_0046: ldnull
IL_0047: ldnull
IL_0048: ldnull
IL_0049: ldnull
IL_004a: call         class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty::Create(string, class [netstandard]System.Type, class [netstandard]System.Type, object, class [Xamarin.Forms.Core]Xamarin.Forms.BindingMode, class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty/ValidateValueDelegate, class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty/BindingPropertyChangedDelegate, class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty/BindingPropertyChangingDelegate, class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty/CoerceValueDelegate, class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty/CreateDefaultValueDelegate)
IL_004f: stsfld       class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty KinBase.Cross.Controls.KinImageView::MediaProperty

// [17 5 - 17 426]
IL_0054: ldstr        "Url"
IL_0059: ldtoken      [netstandard]System.String
IL_005e: call         class [netstandard]System.Type [netstandard]System.Type::GetTypeFromHandle(valuetype [netstandard]System.RuntimeTypeHandle)
IL_0063: ldtoken      KinBase.Cross.Controls.KinImageView
IL_0068: call         class [netstandard]System.Type [netstandard]System.Type::GetTypeFromHandle(valuetype [netstandard]System.RuntimeTypeHandle)
IL_006d: ldnull
IL_006e: ldc.i4.2
IL_006f: ldnull
IL_0070: ldnull
IL_0071: ldnull
IL_0072: ldnull
IL_0073: ldnull
IL_0074: call         class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty::Create(string, class [netstandard]System.Type, class [netstandard]System.Type, object, class [Xamarin.Forms.Core]Xamarin.Forms.BindingMode, class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty/ValidateValueDelegate, class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty/BindingPropertyChangedDelegate, class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty/BindingPropertyChangingDelegate, class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty/CoerceValueDelegate, class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty/CreateDefaultValueDelegate)
IL_0079: stsfld       class [Xamarin.Forms.Core]Xamarin.Forms.BindableProperty KinBase.Cross.Controls.KinImageView::UrlProperty
IL_007e: ret

} // end of method KinImageView::.cctor

.property instance class [KinBoxRest]KinboxRest.BaseMedia/SIZE PhotoSize()
{
.get instance class [KinBoxRest]KinboxRest.BaseMedia/SIZE KinBase.Cross.Controls.KinImageView::get_PhotoSize()
.set instance void KinBase.Cross.Controls.KinImageView::set_PhotoSize(class [KinBoxRest]KinboxRest.BaseMedia/SIZE)
} // end of property KinImageView::PhotoSize

.property instance int32 CacheForXDays()
{
.get instance int32 KinBase.Cross.Controls.KinImageView::get_CacheForXDays()
.set instance void KinBase.Cross.Controls.KinImageView::set_CacheForXDays(int32)
} // end of property KinImageView::CacheForXDays

.property instance class [KinBoxRest]KinboxRest.SystemPhoto Photo()
{
.get instance class [KinBoxRest]KinboxRest.SystemPhoto KinBase.Cross.Controls.KinImageView::get_Photo()
.set instance void KinBase.Cross.Controls.KinImageView::set_Photo(class [KinBoxRest]KinboxRest.SystemPhoto)
} // end of property KinImageView::Photo

.property instance class [KinBoxRest]KinboxRest.Media Media()
{
.get instance class [KinBoxRest]KinboxRest.Media KinBase.Cross.Controls.KinImageView::get_Media()
.set instance void KinBase.Cross.Controls.KinImageView::set_Media(class [KinBoxRest]KinboxRest.Media)
} // end of property KinImageView::Media

.property instance bool Bozo()
{
.get instance bool KinBase.Cross.Controls.KinImageView::get_Bozo()
.set instance void KinBase.Cross.Controls.KinImageView::set_Bozo(bool)
} // end of property KinImageView::Bozo

.property instance bool baaa()
{
.get instance bool KinBase.Cross.Controls.KinImageView::get_baaa()
.set instance void KinBase.Cross.Controls.KinImageView::set_baaa(bool)
} // end of property KinImageView::baaa

.property instance bool IsChanged()
{
.get instance bool KinBase.Cross.Controls.KinImageView::get_IsChanged()
.set instance void KinBase.Cross.Controls.KinImageView::set_IsChanged(bool)
} // end of property KinImageView::IsChanged

.property instance bool Bozoooo()
{
.get instance bool KinBase.Cross.Controls.KinImageView::get_Bozoooo()
.set instance void KinBase.Cross.Controls.KinImageView::set_Bozoooo(bool)
} // end of property KinImageView::Bozoooo

.property instance bool bla1()
{
.get instance bool KinBase.Cross.Controls.KinImageView::get_bla1()
.set instance void KinBase.Cross.Controls.KinImageView::set_bla1(bool)
} // end of property KinImageView::bla1

.property instance bool bla2()
{
.get instance bool KinBase.Cross.Controls.KinImageView::get_bla2()
.set instance void KinBase.Cross.Controls.KinImageView::set_bla2(bool)
} // end of property KinImageView::bla2

.property instance bool bla3()
{
.get instance bool KinBase.Cross.Controls.KinImageView::get_bla3()
.set instance void KinBase.Cross.Controls.KinImageView::set_bla3(bool)
} // end of property KinImageView::bla3

.property instance bool bla5()
{
.get instance bool KinBase.Cross.Controls.KinImageView::get_bla5()
.set instance void KinBase.Cross.Controls.KinImageView::set_bla5(bool)
} // end of property KinImageView::bla5

.property instance bool bla4()
{
.get instance bool KinBase.Cross.Controls.KinImageView::get_bla4()
.set instance void KinBase.Cross.Controls.KinImageView::set_bla4(bool)
} // end of property KinImageView::bla4

.property instance string Url()
{
.get instance string KinBase.Cross.Controls.KinImageView::get_Url()
.set instance void KinBase.Cross.Controls.KinImageView::set_Url(string)
} // end of property KinImageView::Url

.property instance class [Xamarin.Forms.Core]Xamarin.Forms.BindingBase PhotoPropertyBinding()
{
.set instance void KinBase.Cross.Controls.KinImageView::set_PhotoPropertyBinding(class [Xamarin.Forms.Core]Xamarin.Forms.BindingBase)
} // end of property KinImageView::PhotoPropertyBinding

.property instance class [Xamarin.Forms.Core]Xamarin.Forms.BindingBase MediaPropertyBinding()
{
.set instance void KinBase.Cross.Controls.KinImageView::set_MediaPropertyBinding(class [Xamarin.Forms.Core]Xamarin.Forms.BindingBase)
} // end of property KinImageView::MediaPropertyBinding

.property instance class [Xamarin.Forms.Core]Xamarin.Forms.BindingBase UrlPropertyBinding()
{
.set instance void KinBase.Cross.Controls.KinImageView::set_UrlPropertyBinding(class [Xamarin.Forms.Core]Xamarin.Forms.BindingBase)
} // end of property KinImageView::UrlPropertyBinding
} // end of class KinBase.Cross.Controls.KinImageView

`
Thanks

  • become a patron if you want people to spend time helping you
  • please raise individual issues for each issue.
  • for each point to a github repro that contains a minimal solution to reproduce the issue
  • fix the markdown code formatting

BTW dotpeek will show u the original code if it can find it. use ILSpy instead

"become a patron if you want people to spend time helping you"

Simon, I don't know if you noticed but I'm helping you here as well. It goes both ways, I was planning on becoming a patron but I guess you only see it as going one way. I spent the time to find issues, the rest of your patron won't know what I know now and will be surprised when things go wrong. You are doing a disservice to your own patrons by ignoring these issues. The reason why a bug from 2014 is closed by you but in reality still exists.

Very disappointed with that comment, there are better ways to get the message across. I'm sure you get a lot of crap from users but these issues are real and I would've spent the time to split them into individual tasks if you were not so rude but I don't really care at this point.

Apologies for the lack of proper formatting, I see now how it makes my overall issues less valuable.

please re-read my comment. i was not being rude, i was being blunt. The majority of issues raised by people are not bugs, they are usually people who have not read the doco or bugs in their own code base that they mis-attribute to Fody.

I should point out that you chose to ignore the issue template https://github.com/Fody/.github/blob/master/.github/ISSUE_TEMPLATE/bug_report.md which pretty clearly outlines what is required to be raising an issue. It even says

Where it is clear that the below content has not read, the issue is likely to be closed with "please read the template". Please don't take offense at this. It is simply a time management decision. When someone raises an issue, without reading the template, then often too much time is spent going back and forth to obtain information that is outlined below.

. You are doing a disservice to your own patrons by ignoring these issues.

I am not ignoring them. I asked you break them down in a way that can be triaged.

I don't know if you noticed but I'm helping you here as well.

I dont know. You raised a 1000+ line issue (with many sub issues), did not follow the issue template, and didnt provide repros to work with.

And sorry for seeming rude. I currently manage 130+ nuget packages https://www.nuget.org/profiles/simoncropp and am time poor. The issue template, and my process, is designed to help weed out the non-issues, and avoid wasting time asking for the same information over and over. If you can think of a more effective way of doing this, please let me know.

It's frustrating to me Simon that I spent many hours yesterday tracking a bug that was opened in 2014 and you ignored and I found it and then found additional issues. Yes, I could've done a better job posting the issue but when my issue is not a question and I'm pointing out some issues, I thought you would read it before you close it even if it's not formatted or posted as you like. At the moment, I've lost all interest in helping because in reality, I don't benefit by you making these fixes. I was trying to help, you would've seen this if you took a quick look.

I'm happy to become a patron because I think I will be using your code but I don't like the way the message was blunt. I have this idea at work, listen to everyone even if they are known to say stupid things because once in a while they say something brilliant. Maybe I said something in my description that would've given you an aha moment since you know the code. I wouldn't have asked you to analyze all but a quick read from you would've told you if I'm wasting your time or not. Since you asked how to be more effective, here is my answer. I guess for the benefit of everyone who will use your component, read it first and if it sounds stupid, close it but if you think there is something there, then tell the person (gently) to split and clean up. By just ignoring it without a read, you have lost a chance at fixing something that others haven't noticed.

I don't want to argue with you any longer on this as I have to get back to coding as I'm sure you do. If I ever need any of these issues solved, I'll split the issue and clean up the formatting.

I've just become a patron to confirm that I do appreciate the hard work you've put in (and no, I'm not looking for help or issues to be fixed) just to keep my end of your licensing. Thank you

@ShakAttacked It would be maybe a good idea to investigate the one or other issue you have found. If you want to support this cool project, please split this issue into smaller individual issues, as @SimonCropp has already suggested, so somebody can pick it up.