Hi JB, I was successfully able to import the Type with all members.But when I do a peverify on the generated assembly it threw an error
[IL]: Error: [D:\TargetLibrary.dll : TargetLibrary.HelperClass::Init] [HRESULT 0x80070002] - The system cannot find the file specified. But I am able to reference the assembly and use the method Init,without issues and it works as desired. csk On May 19, 5:02 pm, srcKode <[email protected]> wrote: > Thanks JB. that works !! :) > > var vDef = (VariableDefinition)ins.Operand; > srcIns = > Instruction.Create(ins.OpCode,newMethod.Body.Variables[vDef.Index]); > > I was wondering,why the attributes of the VariableDefinition didn't > appear in the new method in the same loop.The index of all the > variables was 0.and the method infromation was also null. > > On May 19, 3:28 pm, Jb Evain <[email protected]> wrote: > > > Hi, > > > On Thu, May 19, 2011 at 12:21 PM, srcKode <[email protected]> wrote: > > > Can I get the Variables from the new method body with out actually > > > saving it or adding it to the target assembly. > > > Yes. > > > > The steps i did to clone the method is > > > > 1.Add parameters > > > 2.Add Variables > > > 3.Add Exception Handlers(this have some issues too) > > > 4.Add Instructions > > > > Sequentially ... > > > In pseudo code: > > > MethodDefinition originalMethod = ...; > > MethodDefinition targetMethod = ...; > > > foreach (VariableDefinition variable in originalMethod.Body.Variables) > > targetMethod.Body.Variables.Add (new VariableDefinition (import > > (variable.VariableType))); > > > var il = targetMethod.Body.GetILProcessor (); > > > foreach (var instruction in originMethod.Body.Variables) > > switch (instruction.OpCode.OperandType) > > case InlineVar: case ShortInlineVar: > > var originalVar = (VariableDefinition) instruction.Operand; > > il.Emit (instruction.OpCode, targetMethod.Body.Variables > > [originalVar.Index]); > > > Jb -- -- mono-cecil
