问题标签 [reflection.emit]

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 回答
1299 浏览

wcf - LinqPad 如何支持 WCF 数据服务?

LinqPad 支持 WCF 数据服务。如果您分配 URL,例如http://services.odata.org/Northwind/Northwind.svc/。它将列出所有可用的数据对象,您可以查询它们。我猜 LinqPad 在运行时通过反射生成所有可用的数据类。发射。

我想知道谁能告诉我如何做到这一点。或者也许有人以前做过。

任何反馈表示赞赏。

0 投票
1 回答
1046 浏览

reflection.emit - 移除由 Reflection Emit 创建的动态生成的类型

我正在使用反射在运行时发出一些动态类型。为什么并不重要。

我现在的问题是使用像 AssemblyBuilder、ModuleBuilder 和 TypeBuilder 这样的类,可以完美地生成一个类型,我可以毫无问题地使用它。

但是,在某些情况下,我可能需要更改生成类型的定义。如何从生成的程序集中删除生成的类型?

0 投票
2 回答
1036 浏览

c# - 使用 Reflection.Emit 发出“使用 (x) { ... }” 块?

我正在尝试在 C# 中使用 Reflection.Emit 来发出一个using (x) { ... }块。

在我在代码中,我需要获取堆栈的当前顶部,这是一个实现 IDisposable 的对象,将其存储在局部变量中,在该变量上实现一个 using 块,然后在其中添加更多代码(我可以处理最后一部分。)

这是我尝试在 Reflector 中编译和查看的示例 C# 代码:

这在反射器中看起来像这样:

当使用 Reflection.Emit 时,我不知道如何处理最后的“.try ...”部分。

有人可以指出我正确的方向吗?


编辑:通过电子邮件询问代码后,我将在此处发布我的流畅界面代码,但除非您获取我的一些类库,否则它对任何人都没有多大用处,这也是一些代码。我正在努力处理的代码是我的 IoC 项目的一部分,我需要生成一个类来实现对服务的方法调用的自动记录,基本上是一个用于自动生成代码的服务的装饰器类。

实现所有接口方法的方法的主循环是这样的:

EmitUsing 吐出 Jon 回答的 BeginExceptionBlock,所以这就是我需要知道的。

以上代码来自LoggingDecorator.cs,IL 扩展主要在ILGeneratorExtensions.Designer.cs中,其他文件在LVK.Reflection命名空间中。

0 投票
2 回答
2898 浏览

c# - Reflection.Emit:如何可靠地将 MethodBuilder 转换为 RuntimeMethodInfo?

在动态生成类型并调用 TypeBuilder.CreateType 之后,我想创建一个指向新类型中的方法的委托。但是如果我使用类似的代码

重用 methodBuilder 作为 methodInfo,我得到异常“MethodInfo 必须是 RuntimeMethodInfo”。现在通常我可以重新获取 MethodInfo

但是我的类可能包含几个同名的重载方法。我如何确保我得到正确的?方法是否有一些我可以在loadedType中查找的持久标识符?

更新:好的,这就是我用来重新获取 MethodInfo 的方法。我只是希望我能确定它在所有情况下都有效。

0 投票
3 回答
689 浏览

.net - 一般来说,如何将 ilasm 语法转换为 Reflection.Emit 调用?

我正在编写一个特殊用途的迷你编译器,我经常查看反汇编的 CIL 来弄清楚如何做事。但如何将反汇编代码转换为 Reflection.Emit 调用通常并不明显。是否存在参考手册或任何其他信息来源来进行此翻译?

编辑:是的,将操作码映射到 ILGenerator 非常简单;我说的是所有其他的东西,比如 .directives 和属性。例如,您如何知道如何编写 Reflection.Emit 等价物Dictionary<TKey,TValue>

或者“参数”指令怎么样?

0 投票
7 回答
2178 浏览

c# - 在运行时将属性的属性从一个实例复制到另一个实例(不同类型)

假设我有 2 个这样的课程:

是否可以在运行时将属性从 foo 复制到 bar ?

0 投票
1 回答
486 浏览

.net - 什么可能导致此 ExecutionEngineException?

我正在尝试使用 Reflection.Emit 在动态程序集中生成包装类。自动包装器生成是我正在编写的名为“GoInterfaces”的新开源库的一部分。

包装类实现IEnumerable<string>并包装List<string>. 在 C# 术语中,它所做的只是:

但是,当我尝试在包装类上调用 GetEnumerator() 方法时,我得到了 ExecutionEngineException。所以我将我的动态程序集保存到一个 DLL 并在其上使用了 il​​dasm。下面的代码有什么问题吗?

我有一个测试套件,它包含各种不同的东西,包括从其他接口派生的接口,以及具有相同签名的多个接口方法。只有当我尝试包装IEnumerable<T>时才会出现此问题。如果有人愿意,我很乐意发送源代码(2 个 *.cs 文件,无依赖项)。

0 投票
1 回答
163 浏览

.net - 如何判断一个类/方法是否可以使用反射访问?

我使用动态程序集在运行时创建派生类。如何使用反射判断基类和基类中的各个方法是否可以在动态程序集中的派生类中使用/调用?

0 投票
1 回答
262 浏览

c# - 如何创建 x64 DynamicAssembly

我目前正在将我的一个项目从 x86 移植到 x64。它是一个插件,绝对必须作为 x64 运行,因为主机也是如此。

应用程序的一部分创建了一个动态程序集:

然后将其保存到磁盘。我检查了它dumpbin /headers,它在 x86 中!

如何从代码强制程序集为 x64?

0 投票
4 回答
116 浏览

reflection - 哪些框架/语言支持运行时类创建?

我正在尝试汇总支持运行时类创建的框架/语言列表。例如,在 .NET 中,您可以使用该System.Reflection.Emit库在运行时发出新类。如果您可以提及支持此(或它的某些变体)的其他框架/语言,那将非常有帮助。

谢谢 :)