当前位置: 首页 > 编程语言 > C#

使用Mono.Cecil导入方法分享

时间:2023-04-11 02:09:47 C#

使用Mono.Cecil导入方法请帮我导入方法。我想编织一个程序集,从另一个程序集中定义的基类注入方法调用引用(实际上它是定义编织代码的程序集)。privatevoidInsertCallSetReference(){//获取加载指令替换varilProcessor=Property.SetMethod.Body.GetILProcessor();varargumentLoadInstructions=ilProcessor.Body.Instructions.ToList();MethodReferencemethodReference=ImportMethod("SetReference");foreach(varinstructioninargumentLoadInstructions){if(instruction.OpCode==OpCodes.Stfld){ilProcessor.InsertAfter(instruction,ilProcessor.Create(OpCodes.Call,methodReference));ilProcessor.InsertAfter(指令,ilProcessor.Create(OpCodes.Ldarg_1));ilProcessor.InsertAfter(指令,ilProcessor.Create(OpCodes.Ldstr,DBFieldName));ilProcessor.InsertAfter(指令,ilProcessor.Create(OpCodes.Ldarg_0));ilProcessor.Remove(指令);休息;}}}方法导入代码正常工作并返回方法引用privateMethodReferenceImportMethod(stringname){vartype=MongoConnectModule.Import(typeof(BaseDataObject));返回MongoConnectModule.Import(type.Resolve().Methods.First(m=>m.Name==na我));但在AssemblyDefinitionWrite调用之后它会抛出错误:C:devMongoConnectWeavingTaskTestWeavingCodeWeaving.targets(32,5):errorMSB4018:System.ArgumentException:Declarationofmember'System.VoidMongoConnect.BaseDataObject::SetProperty(System.String,System.Object)'在另一个模块中,需要导入_assemblyDefinition.Write(_assemblyPath,newWriterParameters(){WriteSymbols=true,SymbolWriterProvider=debugWriterProvider});知道我该怎么做吗?我出于一个有趣的原因找到了解决方案。Module.Import()方法必须从我们要修改的当前模块调用,而不是定义该方法的模块。从原始文档中不清楚。比如我们想把Referenced.dll程序Main.dll定义的一些方法添加到我们的Main.dll程序Main.dll中。那么我们就要找到Main.dll程序集的主模块,然后调用MainModule.Import(methodFromReferencedAssembly);以上就是C#学习教程:使用Mono.Cecil导入方式分享的全部内容,如果对大家有用还需要了解更多关于C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: