I can't provide the full source at the moment. Suffice to say,
everything else is boilerplate code. The only changes that I'm making
to the entire assembly is within that entire method body I just
posted, and that's what makes it so confusing. Something like adding a
new interface implementation should be very straightforward, and yet,
PEVerify all of a sudden keeps complaining about it.
I figured out that the problem is caused by that one method, and once
I comment out that portion of the code that adds the interface
implementation, PEVerify works just fine again.
On Oct 24, 11:08 pm, "Jb Evain" <[EMAIL PROTECTED]> wrote:
> What about providing the full source?
>
> On 10/24/07, Philip_L <[EMAIL PROTECTED]> wrote:
>
>
>
>
>
> > 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]>
>
> --
> Jb Evain <[EMAIL PROTECTED]>
--~--~---------~--~----~------------~-------~--~----~
--
mono-cecil
-~----------~----~----~----~------~----~------~--~---