Mono.Cecil:调用基类'来自其他程序集的方法
如何按名称获取对基类方法的 MethodReference?
我已经尝试过了
type.BaseType.Resolve().Methods;
,如果我将包含基类的 dll 添加到 assemblyresolver,它会返回方法。 但是如果我添加一个调用使用
MSILWorker.Create(OpCodes.Call, baseMethod);
(其中通过从已解析的 TypeDefinition 中查找方法找到了 baseMethod) 生成的 IL 不可读,甚至 Reflector 也会冻结并退出。
现在一些IL:
如果在类型上调用私有方法:
call instance void SomeNamespace.MyClass::RaisePropertyChanged(string)
如果在基类型上调用受保护方法:
call instance void [OtherAssembly]BaseNamespace.BaseClass::RaisePropertyChanged(string)
那么,如何使用 Mono.Cecil 生成后者?
How can I get a MethodReference to a base class' method by name?
I've tried
type.BaseType.Resolve().Methods;
and if I add the dll containing the base class to the assemblyresolver it returns the methods.
But if I add a call using
MSILWorker.Create(OpCodes.Call, baseMethod);
(where baseMethod was found by foreaching Methods from the resolved TypeDefinition)
the resulting IL is unreadable, even Reflector freezes and quits.
Now some IL:
if calling private method on type:
call instance void SomeNamespace.MyClass::RaisePropertyChanged(string)
if calling protected method on base type:
call instance void [OtherAssembly]BaseNamespace.BaseClass::RaisePropertyChanged(string)
So, how can I produce the latter using Mono.Cecil?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
正如您所猜测的,您需要获得模块范围内的正确 MethodReference。因此,如果您有:
那么 baseType 和 baseMethod 是来自另一个模块的定义。在使用之前,您需要导入对 baseMethod 的引用:
As you guessed, you need to get a proper MethodReference scoped for the module. So if you have:
Then baseType and baseMethod are definitions from another module. You need to import a reference to the baseMethod before using it: