问题标签 [dynamicmethod]

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 投票
3 回答
146 浏览

c# - 如何将 Expression.Lambda 附加到任何所有者类型?

我希望这个测试通过:

这是使堆栈遍历遗留代码正常工作所必需的。最简单的方法是什么?

我更喜欢最便携的方式。

0 投票
1 回答
117 浏览

c# - 动态方法 OpCodes.Stfld 导致“操作可能破坏运行时”

我正在尝试将 .Net 3.5 项目升级到 .Net 4.5,一切正常,但一个 DynamicMethod 导致“操作可能破坏运行时”异常

调用代码

dataProviderAdapter.GetGuid(values, index) 按预期返回 system.Guid,但调用 fieldSetter 会导致“操作可能破坏运行时”异常。

我对 IL 没有任何经验,所以我真的不知道从哪里开始调试它。PEVerify 不返回任何错误。任何帮助将不胜感激。

0 投票
1 回答
982 浏览

c# - 通过表达式树编译动态实例方法,使用这个,私有和受保护的访问?

是否可以在 C#(或可能的其他 .NET 语言)中创建动态方法作为现有类型的实例方法,并可以访问“this”引用、私有和受保护成员?

在不规避可见性限制的情况下,对私有/受保护成员的合法访问对我来说非常重要,因为 DynamicMethod 可以做到这一点。

Expression.Lambda CompileToMethod(MethodBuilder) 调用对我来说看起来非常复杂,我还没有找到一种方法来为已经存在的类型/模块创建合适的 MethodBuilder

编辑:我现在从表达式树创建了一个副本 Action<DestClass, ISourceClass>,就像一个静态/扩展方法。无论如何,Expression.Property(...) 访问是由反射 (PropertyInfo) 定义的,如果通过反射定义,我可以访问私有/受保护成员。不如 DynamicMethod 和发出的 IL 好,其中生成的方法表现得像具有可见性检查的成员(甚至比普通的 C# 复制代码快一点),但表达式树似乎更易于维护。

像这样,在使用 DynamicMethod 和 Reflection.Emit 时:

此动态方法可以通过完整的可见性检查访问 DestClass 私有/受保护成员。

编译表达式树时是否有任何等价物?

0 投票
1 回答
1296 浏览

c# - 从动作创建 DynamicMethod指示

我正在玩 DynamicMethod 并旨在执行以下操作:

我有一个动作,我从中获取 IL 代码作为字节使用GetILAsByteArray(). 从这个字节我想创建一个动态方法并执行。这是我正在尝试做的一个例子:

调用时dynamicCallback.Invoke(null, new object[] { "World" })我们得到“异常抛出:mscorlib.dll 中的'System.BadImageFormatException'”。

我不知道的一件事是我应该使用什么作为第二个参数SetCode(),应该使用什么作为'maxStackSize'?如何设置与初始操作相同的值?但我想这不是例外的原因。

如何从 IL 字节正确创建动态方法?


解决方案

这里我想总结一下 Dudi Keleti 提供的完整解决方案:

注意:DynamicMethodHelper 是罗海波开发的类,在文中有描述,也可以直接在这里下载。

0 投票
1 回答
485 浏览

c# - 让 DynamicMethod 调用其他方法

我希望能够通过传递事件的名称和依赖于客户端代码的操作来订阅任何对象的任何事件。我有以下代码

上面代码的用法:

当事件触发时,它会导致 InvalidProgramException。我知道这是一个棘手的问题,我可以简单地使用 += 订阅,但有人能说出我的代码崩溃的原因吗?我想 ILGenerator.Emit 有问题,有什么建议吗?

0 投票
1 回答
169 浏览

c# - 为什么我无法在 C# 中使用 IL Generation 创建对象的实例?

我有以下课程:

以及以下动态创建 a 实例的方法ConstructorInfo

然后我使用该方法为每个构造函数创建这个类的两个实例:

然而,我得到43603896instanceTwo而不是得到1

在相关构造函数中点击断点确实显示43603896被传递给实例,但我不知道为什么!?

0 投票
1 回答
1434 浏览

c# - DynamicMethod - 公共语言运行时检测到无效程序

因此,我尝试使用 ilgenerator 通过动态方法从外部 DLL 调用方法。

以及 DLL 代码:

但我收到了这个奇怪的错误:

test.exe 中发生了“System.InvalidProgramException”类型的未处理异常
附加信息:公共语言运行时检测到无效程序。

而且我不知道我做错了什么?

0 投票
1 回答
127 浏览

.net - DynamicILInfo 调用方法

所以我在.NET 中进行调试。我正在尝试从 dll 中调用带有 DynamicILInfo 的方法。但是我做错了什么?

0 投票
2 回答
653 浏览

c# - 创建 DynamicMethod 以在任何类型上设置只读字段

我的目标是在运行时创建一个委托,它可以将readonly任何引用类型中的任何字段(包括 )设置为用户指定的值。不幸的是,当包含类型的程序集指定属性时,我当前的实现会VerificationException在运行时抛出一个。[AllowPartiallyTrustedCallers]

AssemblyOne

AssemblyTwo

Main

所以MyType有一个TypeOnewhich 有一个 readonly TypeTwo。在这种情况下,在运行时DynamicMethod抛出 a VerificationException

是否可以创建这样一个委托,它适用于您抛出的任何声明类型 + 字段类型?如果是这样,怎么做?

我意识到readonly不应该在构建后设置字段,但这样做的目的是为了反序列化和深度复制。

0 投票
1 回答
395 浏览

c# - 如何在 DynamicMethod Emit 中表示 typeof(Int32&) 类型

我有以下代码:

运行后,得到如下错误:

因为它的签名或安全透明与委托类型的签名或安全透明不兼容。

以下正常工作: