问题标签 [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 投票
2 回答
638 浏览

c# - Object.Equals(对象,对象)处的 NullReferenceException

情况

我正在使用 ILGenerator 生成包装器。我使用Object.Equals(Object, Object)用于实现包装器字段的相等比较。调试器抛出NullReferenceException带有以下堆栈跟踪的 a。

Object.Equals(Object, Object) - 反汇编

正如您在反汇编中看到的那样,不可能NullReferenceException发生任何事情,因为它不会到达方法调用所在的部分。

可能的问题

正如我所说,漏洞代码是使用 ILGenerator 生成的,我认为这可能是错误的唯一可能来源。调用者内部只有值类型,因此对象甚至不可能为空。

调用 IL 代码

0 投票
1 回答
280 浏览

c# - 尝试执行生成的代码时出现异常

我正在为动态类型实现构造函数,但是当我执行代码时,它会抛出一个异常,即 IL-Code 已损坏(FatalExecutionError)。

IL代码

工作部分:

添加以下 IL 代码时会发生错误。它必须与代码有关,或者是其他一些奇怪的行为,仅在此代码之前的代码中发生。

关键是导致错误的行(似乎它们是错误的原因)只是一个简单的as,当谈到 C# 时,仅此而已。如果有人有解决此问题的想法,那就太好了。

生成代码

演员等级(编辑)

我注意到它OpCodes.Castclass不会引发错误,但当运行时尝试强制转换无效对象时当然会引发运行时错误。

另一个疯狂的事情(编辑2)

我还注意到,当我用它交换最后一个IsinstCastclass它可以正常工作而不会引发任何错误。这让我更加想知道这个错误。当注释掉生成 castclass 的行时,错误又回来了。

0 投票
1 回答
253 浏览

c# - MethodBody.LocalVariables Count 令人困惑

对于没有局部变量的简单方法,如下所示

MethodInfo.GetMethodBody().LocalVariables.Count = 2 为什么?添加另一个 switch 语句,计数变为 3 WHY?

没有定义局部变量。那么为什么是 2 和 3。另外,如果另一个带有 j 的 switch 语句将计数保持在 2。

0 投票
4 回答
4635 浏览

c# - 将一个对象属性值转移到另一个对象

毕竟,我知道AutoMapper,我不想使用它。因为我正在学习C#,我想深入了解它。所以我正在尝试自己解决这个问题(如下所述)。

但是,我正在尝试创建一个属性复制器,以将一种类型的属性的值对应到另一种类型的属性,如果该属性具有相同的名称和类型并且可以从源读取并且在目标中可写。我正在使用type.GetProperties()方法。采样方法在这里:

它有效,但我在 SO 上阅读了一个答案,即使用System.Reflection.Emit后期绑定的代表更快并且性能更高ILGenerator。但是没有更多的解释或任何链接。你能帮我理解加速这段代码的方法吗?或者你能给我一些关于、、和迟到的代表的链接吗?或者任何你认为能帮助我服从的东西?EmitILGenerator

完成问:

我从@svick 的回答中了解并学到了很多东西。但是现在,如果我想将它用作一个开放的泛型方法,我该怎么做呢?像这样的东西:

或扩展名:

0 投票
1 回答
1838 浏览

c# - IL泛型?

是否可以将泛型与 IL 生成器一起使用?

0 投票
1 回答
896 浏览

c# - 通过 ILGenerator 的委托方法调用失败,并显示“无法从其他模块导入全局方法或字段”。

基本上我正在尝试生成一些包装类,它将所有调用重定向到另一个类+在调用之前/之后进行一些参数/返回值转换。但调用il.Emit( OpCodes.Call, base_method_caller.Method )失败并出现错误“System.InvalidOperationException:无法从其他模块导入全局方法或字段”。代表是正确的,我可以通过o.DynamicInvoke(...). 有人知道如何编写 Emit 指令来调用 Delegate 吗?

0 投票
2 回答
11973 浏览

c# - 动态创建基类的类型和调用构造函数

我需要动态创建一个类。大多数事情都很好,但我一直在生成构造函数。

在调用构造函数时,我得到了一个 BadImageFormatException。我究竟做错了什么?

按照要求:

BaseClass 看起来像这样:

我想在运行时得到什么:

0 投票
1 回答
142 浏览

c# - ComplexTypes 和动态包装器

DynamicWrapper让接口以这种方式关联到对象

我怎样才能扩展这个库,以便我可以编写类似的东西

为了打电话

MyTypeCopy 是另一个命名空间中 MyType 的副本?

一种解决方案是添加

到接口,并在调用方法之前应用强制转换(序列化/反序列化)。

有没有办法添加 DynamicMethod 以在 DynamicWrapper 库中应用强制转换?

0 投票
2 回答
496 浏览

c# - .NET 中用于 Windows 应用商店应用 API 的 Emit.OpCodes 的用途?

我正在考虑将第三方库移植到.NET for Windows Store 应用程序。该库通过调用ILGenerator.Emit方法重载来过度使用System.Reflection.Emit.OpCodes 。

.NET for Windows Store Apps API 中,包含OpCode结构和OpCodes类,但没有ILGenerator类,据我所知也没有替代品。

我显然遗漏了一些东西,但是:没有这个类,在.NET for Windows Store 应用程序APIILGenerator中包含的目的是什么?System.Reflection.Emit.OpCodeOpCodes

0 投票
1 回答
112 浏览

.net - IL Generator 创建时无 DLL 访问

我创建了一个虚拟 DLL。我期待我可以S1在命名空间中访问。我可以看到我的函数,并且当它是 exe 形式时,我可以看到带有 il dasm 的结构。