- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何通过名称获取基类方法的 MethodReference?
我试过了
type.BaseType.Resolve().Methods;
如果我将包含基类的 dll 添加到 assemblyresolver,它会返回方法。但是如果我使用
添加一个调用MSILWorker.Create(OpCodes.Call, baseMethod);
(其中 baseMethod 是通过从已解析的 TypeDefinition 中寻找方法找到的)生成的 IL 是不可读的,甚至 Reflector 也会卡住并退出。
现在一些 IL:
如果在类型上调用私有(private)方法:
call instance void SomeNamespace.MyClass::RaisePropertyChanged(string)
如果在基类型上调用 protected 方法:
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);
关于inheritance - Mono.Cecil:从其他程序集调用基类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4899710/
我正在使用 Mono.Cecil 生成一个程序集,该程序集包含一个派生类,该派生类覆盖导入的基类中的特定方法。覆盖方法是一种“隐式”覆盖。问题是我无法弄清楚如何将其指定为覆盖。 我正在使用以下代码来创
我正在使用Mono.Cecil DLL 文件并编写此代码: AssemblyDefinition sourceAssembly = AssemblyFactory.GetAssembly(assemb
我正在尝试从 .NET 类型获取 Mono.Cecil TypeDefinition,但没有成功。 我正在使用这样的代码: var type = typeof(MarkdownMonster.AppC
我正在使用 Cecil 来尝试读取我的属性属性: [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited =
我有以下方法: public void DoSomething() { Console.WriteLine(""); } 我想用 Mono Cecil 修改这段代码。我想在方法中创建自定义类的实例
我想通过 Mono.Cecil 添加一个新方法,它有一个输出参数,比如: private static bool XXXXX(out Int32 a) 我尝试了以下代码来添加此参数 TypeRefer
如何通过名称获取基类方法的 MethodReference? 我试过了 type.BaseType.Resolve().Methods; 如果我将包含基类的 dll 添加到 assemblyresol
我一直在寻找一个新手问题,但找不到一个简单的例子。谁能给我一个简单的例子,说明如何将 MethodBody 放入最可用的字符串结果中?喜欢: using Mono.Cecil; using Mono.
Cecil中有类似Reflection.Emit.DynamicMethod的东西吗?谢谢。 动态方法 编辑: 下面的事情呢? EmitCall(例如 IL.EmitCall(OpCodes.Call
出于某种原因,当我尝试加载一些程序集并对其进行分析时,出现错误 Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly..
我正在使用 Mono.Cecil 编辑我的目标方法的 IL 代码,以便我可以记录该方法的入口点,而无需编辑实际代码。我能够将调用指令插入到可以执行日志记录操作的方法中。但我不知道如何记录我的目标方法的
我正在尝试重写一个属性的 get 方法: get { return dataString; } 到: get { string temp = dataString;
我正在使用 Mono.Cecil 在属性 setter 中注入(inject)一些指令,并且在注入(inject) Brfalse_s 指令时出现奇怪的错误。这是代码,它简短而简单。 private
我正在使用 Mono.Cecil 在自动实现的属性 setter 中注入(inject)一些 IL 代码。问题是,我可以从 TypeDefinition.Fields 对象中获取对它的引用,但是当我注
我遵循了提示 here ,我什至将以下几行放入: var MSILWorker = prop.SetMethod.Body.GetILProcessor(); MSILWorker.Body.Init
任务: 查找所有调用函数 public static void WriteString(int index0, string s, int index1) { Console.WriteLin
我怎样才能像这样转动字符串: "call System.Console.WriteLine" "ldstr \"hello\"" 带操作数的指令? 最佳答案 如果您现在如何使
好吧,这个问题可能看起来很奇怪,但它很简单——我的意思是如果我在反编译代码中有一个“goto”(brtrue 等),比如示例 br IL_0003 call ***** IL_0003: ret 然后
有没有办法在代码中获取str1? [MyAttribute("str1")] class X {} Mono.Cecil.CustomAttribute.Fields 的实例是空的。 最佳答案 在 .
我的项目中的静态构造函数一直存在一些问题。我需要向类型“”添加一个静态构造函数,以便调用我的资源解密方法。 在下面的 gif 中,您会看到我遇到的问题。 我还将包含代码片段。 创建cctor的代码:
我是一名优秀的程序员,十分优秀!