Mono.Cecil:从其他程序集中调用基类的方法

2024-02-19

如何按名称获取对基类方法的 MethodReference?

我试过了

type.BaseType.Resolve().Methods;

如果我将包含基类的 dll 添加到 assemblyresolver,它将返回方法。 但是如果我使用添加呼叫

MSILWorker.Create(OpCodes.Call, baseMethod);

(其中 baseMethod 是通过从已解析的 TypeDefinition 中查找方法找到的) 生成的 IL 不可读,甚至 Reflector 也会冻结并退出。

现在一些IL:
如果在类型上调用私有方法:

 call instance void SomeNamespace.MyClass::RaisePropertyChanged(string)

如果在基类型上调用受保护的方法:

call instance void [OtherAssembly]BaseNamespace.BaseClass::RaisePropertyChanged(string)

那么,如何使用 Mono.Cecil 生成后者呢?


正如您所猜测的,您需要获得模块范围内的正确 MethodReference。所以如果你有:

TypeDefinition type = ...;
TypeDefintion baseType = type.BaseType.Resolve ();
MethodDefinition baseMethod = baseType.Methods.First (m => ...);

那么baseType和baseMethod是来自另一个模块的定义。在使用之前,您需要导入对 baseMethod 的引用:

MethodReference baseMethodReference = type.Module.Import (baseMethod);
il.Emit (OpCodes.Call, baseMethodReference);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mono.Cecil:从其他程序集中调用基类的方法 的相关文章

  • C++ 是否要求从派生类初始化基类成员?

    class Base public int a Base a 0 virtual Base class Derived public Base public int b Derived b 0 Base pBase static cast
  • 如何让Doxygen忽略继承关系?

    我试图让 Doxygen 在绘制协作图时忽略继承关系 假设我的类定义如下所示 class Derived public Base int x int y int z 现在 当我运行 Doxygen 时 我不想在生成的协作图中看到基类 乍一看
  • .NET 程序集大小会影响性能吗?

    net 程序集的大小是否会影响性能 您的 Windows 窗体 Web 窗体项目中的程序集数量如何 来自微软的模式和实践提高 NET 应用程序性能和可扩展性 http msdn microsoft com en us library ms9
  • 强制派生类实现接口

    我今天在这里 就像昨天一样 遇到了另一个奇怪的界面问题 我有一堂课 public class InputDevice
  • 在 C# 4.0 中,是否可以从泛型类型参数派生类?

    我一直在尝试这个 但我似乎无法弄清楚 我想做这个 public abstract class SingletonType
  • Typescript 继承:扩展基类对象属性

    当扩展一个类时 我可以轻松地向它添加一些新属性 但是 如果当我扩展基类时 我想向基类的对象 简单对象的属性 添加新属性怎么办 这是一个带有一些代码的示例 基类 type HumanOptions alive boolean age numb
  • 在 C++ 中,为什么仅包含与其基类实例的联合的派生类占用的内存多于联合的大小?

    更具体地说 从空类继承的类仅包含一个联合 其成员包括基本无数据类的实例 该类比仅包含联合占用更多的内存 为什么会发生这种情况 有什么方法可以避免消耗额外的内存 下面的代码说明了我的问题 include
  • 等级制度违反了里氏法则——那又怎样?

    我使用的 API 违反了里氏替换原则 它抛出自己的 Exception 类型 该类型扩展了 Exception 但将来自基类的异常消息放入新的 ErrorCode 字段中 并将其自己的 无用的 消息放入 Message 字段中 因此 为了显
  • 如何通过继承在Python中子类化请求

    我想专门化 子类化请求包以添加一些具有自定义功能的方法 我尝试这样做 concrete requests py import requests class concreteRequests requests def init self su
  • 抽象父模型中的 models.E006 - Django 3.1

    我有一个抽象模型和一些从它继承的其他类 models py class Parameter models Model data integer models IntegerField blank True null True class M
  • super 在多重继承中无用? [复制]

    这个问题在这里已经有答案了 在多重继承中 super 如何工作 例如这里我有两个init我想通过 super 发送参数 class LivingThings object def init self age name self name n
  • JPG、DOC、PDF 等文件是否也编译成程序集?

    Q1 Does aspnet compiler exe将网站目录中包含的所有文件 甚至 JPG DOC 和 PDF 类型 编译成程序集 如果将图像添加到Web项目中的文件列表中 从而将它们添加到项目文件中 这些图像也会被VS编译成程序集吗
  • ICSharpCode.Decompiler + Mono.Cecil -> 如何为单个方法生成代码?

    我可以使用 Mono Cecil 和 ICSharpCode Decompiler 生成类型或程序集的代码 但是 如果我尝试为单个方法生成代码 我将收到错误 对象引用未设置为对象的实例 你们能给我任何关于这个的提示吗 提前感谢您的所有帮助
  • 在 GAC 中注册 dll

    我需要向 Windows 2003 服务器上的 GAC 添加一个 dll 服务器未安装 Visual Studio 我在 Windows 2003 Server 中没有找到 Gacutil exe 在 Windows 2003 Server
  • 指向基类的成员指针

    全部 我不明白为什么下面的代码需要强制转换才能工作 有人可以解释一下吗 class Base class Derived public Base class Class public Derived member Derived obj B
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • Angular2中如何从另一个模块继承一个模块?

    因此 我使用 Angular 2 Final 2 0 0 假设我创建了一个 WidgetsModule 其中包含一堆指令和组件 这些指令和组件将帮助我构建应用程序 然后将其导入到我的 AppModule 中 import NgModule
  • 扩展 Protobuf 消息

    我有许多不同的模式 但是每个模式都包含一组字段 我想知道是否有一种方法可以让不同的模式扩展父模式并继承其字段 例如 这就是我想要的 message Parent required string common1 0 optional stri
  • 实现与扩展:何时使用?有什么不同?

    请用易于理解的语言进行解释或提供某些文章的链接 extends is for 延伸一类 implements is for 实施一个接口 接口和常规类之间的区别在于 在接口中您不能实现任何声明的方法 只有 实现 接口的类才能实现方法 C 中
  • 是否可以扩展现有的 Objective-C 块?

    我有一个使用标头中定义的块的类 如下所示 property readwrite copy RequestSucceededBlock succeededBlock 该物业succeededBlock已经设置了一个块 有没有办法用另一个仍然调

随机推荐

  • 从java调用带有表值参数的存储过程

    在我的应用程序中 我想执行类似的查询SELECT FROM 表 WHERE col IN list 其中 list 可以有可变的值 我正在使用 MS SQL 服务器数据库 当我用谷歌搜索这个问题时 我发现了这个链接 http www som
  • 如何检查 Kafka 中的消费者是否消费了某个主题

    如何检查特定消费者群体是否完全消费了某个主题 这相当于在标准排队系统中检查队列是否为空 这并不明显 因为每个消费者只能看到给定的分区 因此它不知道其组中的其他消费者是否消耗了他们的部分 我想这应该以某种方式完成AdminUtils or Z
  • 如何使div相对于父级的高度为100%?

    我坚持下面这样的事情 我需要将右上 div 设为 100 高度 其背景颜色将覆盖主 div 的整个高度 div style width 100 margin auto text align left border 1px solid 628
  • Magento 2 标签翻译显示大括号

    显示双花括号之间的多个翻译的标签 我在 Magento 2 的前端和后端都遇到这个问题 这是我到目前为止所尝试过的 清除并刷新缓存 重新部署静态内容 将 Magento 2 2 5 更新至 2 2 6 请查看图片以获取更多信息 Magent
  • 如何获取 JavaFX 中某个阶段的关闭事件?

    在JavaFX中 如果用户单击阶段的关闭按钮 X 最右上方的十字 如何获取事件 我希望我的应用程序在窗口关闭时打印调试消息 System out println Application Close by click to Close But
  • 为什么表别名通常都是小写?

    我总是这样看例子 但为什么呢 这是一个好的做法吗 因此它们与查询的其余部分 通常以大写形式编写 不同 至于这是否是最佳实践 如果您以全部大写形式编写查询 那么它肯定会使您的查询更易于阅读和理解
  • 如果代码中没有 return 语句,函数在 C 程序中返回什么

    我做了一个关于如何在 C 中递归地反转单链表的函数 功能如下 struct node reverseSLL2 struct node p struct node temp struct node temp1 if p NULL temp1
  • NEST 查询精确文本匹配

    我正在尝试编写一个 NEST 查询 该查询应根据精确的字符串匹配返回结果 我在网上研究过 有关于使用术语 匹配 匹配短语的建议 我已经尝试了所有这些 但我的搜索返回的结果包含部分搜索字符串 例如 在我的数据库中 我有以下几行电子邮件地址 电
  • 如何实施xgboost增量训练?

    问题是由于列车数据大小 我的列车数据无法放入 RAM 中 所以我需要一种方法 首先在整个训练数据集上构建一棵树 计算残差构建另一棵树等等 就像梯度提升树一样 显然如果我打电话model xgb train param batch dtrai
  • Rails 选择 GROUP 中 COUNT 最高的对象

    目标是选择Store其中一个Coupon最常用于 目前 我有这个 并且它有效 分解以供解释 coupon rb has many redemptions has and belongs to many stores def most pop
  • SML 和函数式编码风格

    我开始学习标准机器学习编程语言 https www coursera org course proglang course 在第一个作业中 我尝试编写一个函数is older需要两个日期并评估为true or false 它评估为true如
  • 使用 JavaScript 将 CSV 转换为 XML

    我是 javascript 新手 我需要将 csv 字符串数据转换为 xml 如下所示 CSV 数据 product pakageing qty mno 100ML 200 pqr 400ML 300 abc 150ML 100 XML 应
  • 使用 chromecast 从 IP 摄像机进行流式传输

    我正在尝试通过我的 Android 设备通过 IP 摄像头进行流传输 我已经从发布的代码中编辑了 URLGitHub https github com googlecast cast android sample当我尝试从摄像机的 IP 地
  • log4net 用于 IIS 中托管的 WCF 服务库

    对于一个项目 我有一个 WCF 服务库 目前非常简单 它通过 WCF 服务网站项目托管在 IIS 7 5 中 对于该 WCF 服务库 我需要 log4net 来记录一些重大事件 但启动并访问网站后 不会创建任何日志文件 这是我的配置详细信息
  • 返回 std::map 值的地址是否安全?

    我有一个std map
  • Haskell:instance Functor ((->) r) 的意义是什么

    我承认 我的问题可能源于缺乏知识 而且比较模糊 但我试着去理解 有一些疑问 却无法解决 那么GHC Base有这样的定义 它的意义是什么 instance Functor gt r where fmap 从编程语言的角度来看 我们有真正的基
  • 模拟多次调用的静态方法

    我有一个静态方法 在多个地方使用 主要是在静态初始化块中 它接受一个 Class 对象作为参数 并返回该类的实例 我只想在特定的 Class 对象用作参数时模拟此静态方法 但是 当从其他地方使用不同的 Class 对象调用该方法时 它会返回
  • 使用从文件读取的字符串在 Typescript 中进行字符串插值

    我读过关于模板字符串 http basarat gitbooks io typescript content docs template strings html在打字稿中 我想知道当我从这样的文件中读取字符串时是否可以使用它们 let x
  • 什么时候应该对

    假设我有这样的 HTML 结构 div class a div class floated left div div class floated left div div 我注意到如果我不设置overflow hidden to a 那么
  • Mono.Cecil:从其他程序集中调用基类的方法

    如何按名称获取对基类方法的 MethodReference 我试过了 type BaseType Resolve Methods 如果我将包含基类的 dll 添加到 assemblyresolver 它将返回方法 但是如果我使用添加呼叫 M