More importantly, which overload of the CilWorker class allows me to
emit an Ldfld with a MemberReference? No such overload exists...


On Jan 5, 6:31 am, "Jb Evain" <[EMAIL PROTECTED]> wrote:
> Hi Philip,
>
> > The IL itself is pretty straightforward, but once I run it through
> > PEVerify, it gives me the following error:
>
> > [IL]: Error: [D:\Development\TestBed4\TestBed4\bin\Debug
> > \testlibrary.dll : TestL
> > ibrary.New`1[T]::get_IsInterceptionEnabled][offset
> > 0x00000001]System.BadImageFor
> > matException: Fields inside generic classes must be referenced using
> > MemberRefs,
> >  even in the same module as the class.  [HRESULT 0x8007000B] - An
> > attempt was ma
> > de to load a program with an incorrect format.
>
> It looks pretty simple to workaround, you cannot ldfld the field
> definition here, you have to create a MemberReference with the same
> name, and with the appropriate DeclaringType (which may or may not be
> a GenericInstanceType)
>
> > public class Sample<T>
> > {
> >      bool IsInterceptionEnabled { get; set; }
> > }
>
> > Now, from what I can tell, the only difference here is that the actual
> > C# compiler is loading the backing field using the '!T' type parameter
> > instead of using the naked generic type definition. Does anyone know
> > if there is there a fix for this, or is there some sort of workaround
> > for it? Thanks in advance.
>
> Your best chance here is, as you did, to write the C# equivalent of
> what you want to generate, then dump the Cecil structure that you read
> from this equivalent, so that you can generate the same.
>
> In this case, a MemberReference with the good declaring type.
>
> --
> Jb Evain  <[EMAIL PROTECTED]>
--~--~---------~--~----~------------~-------~--~----~
--
mono-cecil
-~----------~----~----~----~------~----~------~--~---

Reply via email to