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
-~----------~----~----~----~------~----~------~--~---