Well, I already imported both types into the module, and it still
doesn't seem to be working. Any other ideas? I'm practically stumped
here. :/

On Oct 24, 10:07 pm, "Jb Evain" <[EMAIL PROTECTED]> wrote:
> Hey,
>
> This kind of thing usually works well.
>
> It may depend on if you got:
>
> _modifiedInterfaceType and _aopHostType correct.
>
> Jb
>
> On 10/24/07, Philip_L <[EMAIL PROTECTED]> wrote:
>
>
>
>
>
> > I can't figure out why, but every time I try to modify an existing
> > type in the assembly with the following code:
>
> > ...
> >             _hostField = new FieldDefinition("__host", _aopHostType,
> > FieldAttributes.Private);
> >             typeDef.Fields.Add(_hostField);
>
> >             // Implement IModifiedType
> >             if (typeDef.Interfaces.Contains(_modifiedInterfaceType))
> >                 return;
>
> >             typeDef.Interfaces.Add(_modifiedInterfaceType);
>
> >             MethodAttributes attributes = MethodAttributes.Public |
> > MethodAttributes.HideBySig |
> >                                           MethodAttributes.SpecialName
> > | MethodAttributes.NewSlot |
> >                                           MethodAttributes.Virtual;
>
> >             // Implement the getter property
> >             _getHost = new MethodDefinition("get_Host", attributes,
> > _aopHostType);
> >             _getHost.ImplAttributes = MethodImplAttributes.Managed |
> > MethodImplAttributes.IL;
> >             CilWorker IL = _getHost.Body.CilWorker;
> >             IL.Emit(OpCodes.Ldarg_0);
> >             IL.Emit(OpCodes.Ldfld, _hostField);
> >             IL.Emit(OpCodes.Ret);
>
> >             // Implement the setter
> >             _setHost = new MethodDefinition("set_Host", attributes,
> > _voidType);
> >             _setHost.ImplAttributes = MethodImplAttributes.Managed |
> > MethodImplAttributes.IL;
> >             _setHost.Parameters.Add(new
> > ParameterDefinition(_aopHostType));
>
> >             IL = _setHost.Body.CilWorker;
> >             IL.Emit(OpCodes.Ldarg_0);
> >             IL.Emit(OpCodes.Ldarg_1);
> >             IL.Emit(OpCodes.Stfld, _hostField);
> >             IL.Emit(OpCodes.Ret);
>
> >             PropertyDefinition hostProperty =
> >                 new PropertyDefinition("Host", _aopHostType,
> > PropertyAttributes.Unused);
>
> >             _getHost.IsPublic = true;
> >             _setHost.IsPublic = true;
>
> >             hostProperty.GetMethod = _getHost;
> >             hostProperty.SetMethod = _setHost;
>
> >             typeDef.Methods.Add(_getHost);
> >             typeDef.Methods.Add(_setHost);
> >             typeDef.Properties.Add(hostProperty);
> > ...
>
> > After saving the modified assembly, I keep getting this error from
> > PEVerify:
> > ---------------------------------------Error
> > Message---------------------------------------
> > Microsoft (R) .NET Framework PE Verifier.  Version  2.0.50727.42
> > Copyright (c) Microsoft Corporation.  All rights reserved.
>
> > [token  0x02000002] Type load failed.
> > 1 Error Verifying testlibrary.dll
> > ---------------------------------------Error
> > Message---------------------------------------
>
> > Is this a bug, or am I doing something wrong here? I thought this was
> > the most straightforward way to add an interface implementation to an
> > existing class, and I'm not sure whether this is a bug or not. Anyone
> > have any ideas?
>
> > Thanks in advance.
>
> > Regards,
>
> > Philip
>
> --
> Jb Evain  <[EMAIL PROTECTED]>


--~--~---------~--~----~------------~-------~--~----~
--
mono-cecil
-~----------~----~----~----~------~----~------~--~---

Reply via email to