问题标签 [ilgenerator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
477 浏览

c# - 使用 ILGenerator 创建委托

如何使用 ILGenerator.Emit (不是 LambdaExpression.Compile?因为我试图找到一个性能更高的解决方案)动态创建一个具有未知 MethodInfo 的委托,该委托在具有未知参数的未知目标上调用

0 投票
1 回答
576 浏览

compiler-errors - 为什么我得到 System.InvalidProgramException:公共语言运行时检测到无效程序

我只是想生成只生成一个 int 常量的代码。下面是代码: string name = Path.GetFileNameWithoutExtension(outputPath); 字符串文件名 = Path.GetFileName(outputPath);

当我执行 .exe 时,它​​给出了异常为什么?

0 投票
2 回答
819 浏览

c# - ILGenerator 实例化对象并调用实例方法

我正在尝试构造一个泛型类型的实例并在该实例上调用一个方法。然后返回方法的结果。

我不断收到“System.InvalidProgramExecution”异常。

GenericType 类看起来像这样

0 投票
1 回答
1432 浏览

c# - ILGenerator 调用带参数的实例方法

我正在尝试构造一个泛型类型的实例并在该实例上调用一个方法。然后返回方法的结果。

我不断收到“System.BadImageFormatException: 'Bad class token.'”异常。

GenericType 类看起来像这样

0 投票
1 回答
735 浏览

c# - 如何调用操作来自 il 发电机

在此示例代码中,我试图从 il 生成器调用匿名操作。我不确定是否以及如何加载对委托的引用以及如何调用它。如果OnFunctionCall是静态方法而不是属性,我可以做到。

0 投票
0 回答
247 浏览

c# - 使用 ILGenerator 生成复制和转换对象属性的方法给出 InvalidProgramException

我正在尝试生成一种将属性从一个通用对象复制到另一个的方法,如果属性类型不同,我希望它使用 TypeConverter 来转换属性值。
最终我想扩大它,以便我可以自动将 IDataRecords 直接映射到对象。但是现在当属性类型不同时,我遇到了将属性从一个对象复制到另一个对象的问题。如果所有属性类型都相同,则生成的方法可以正常工作。

我不明白为什么不能生成,因为我用C#写了一个示例方法然后查看了IL,我生成的IL应该是一样的。

下面是一个简化版本,完整代码可以在https://gist.github.com/DerekZiemba/468b84d7b5a5a289470859e261f17217找到

下面是 CopyExample 生成的 IL:

这是 ILGenerator 方法,它应该产生与上面的示例相同的输出:

0 投票
1 回答
62 浏览

c# - DynamicMethod 调用因 StackOverFlowException 而终止

我有这个类(简化示例)

我想在using的实例上Bar调用该方法,如下所示:BarDynamicMethod

但是,它不能按预期工作,而是中止

进程因 StackOverFlowException 而终止。


有人可以告诉我我做错了什么吗?是不是参数不匹配?如何调用 的Func特定实例Bar

0 投票
0 回答
68 浏览

c# - 了解由以下代码段生成的 IL

您好,我正在尝试使用Reflection.Emit动态生成方法,但我不知道如何解释以下代码段:

C# (我想要生成的)

释放模式下生成的IL

有人可以向我解释以下几点:

1第一条指令L_0000调用了一个单例对象但没有在任何地方存储它的值。为什么它不使用ldarg.0然后将这个值转发到 Command<Cell>构造函数中?
2然后它调用ldarg.1...当在我们的方法中我们只有该方法的 1 个参数时。

我期待着这样的事情:

1.加载参数0 - ldarg.0
2.stloc它在 async变量
3.调用构造函数Command<Cell>消耗上面的行
4.stloc它在command
5.调用ProcessAsync<Cell>
6.ret

0 投票
1 回答
56 浏览

c# - C# - 从动态方法调用具有“参数字符串 []”的委托

是否可以从动态方法中调用delegate作为参数的 a ?params string[]

例子:

因为每当我运行上面的代码时,它都会给我这个:

我在这里做错了吗?

0 投票
2 回答
499 浏览

c# - 为什么 IL.Emit 方法要添加额外的 nop 指令?

我有这段代码会发出一些IL调用对象string.IndexOf的指令:null

这是生成的IL代码:

如您所见,nop指令前有三个call指令。

首先我想到了 Debug/Release 构建,但这不是编译器生成的代码,我正在发出原始 IL 代码并希望看到它的原样。

所以我的问题是为什么nop我没有发出任何指令时会有三个指令?