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

.net - MethodBuilder.DefineParameter 无法设置参数名称的原因?

我正在为 WCF 问题创建一个基于现有接口的接口,但我有“DefineParameter”没有设置参数名称(创建类型的方法参数没有名称)。
你能看出原因吗?

0 投票
1 回答
551 浏览

.net - 我正在尝试使用 System.Reflection.Emit 编写一个 .NET 编译器,我该如何进行类型解析?

我有一个从引用的 dll 解析类型的策略。我一直在尝试解析正在编译的程序集中定义的类型。我正在使用没有第三方库的 System.Reflection.Emit api。

例如:

解决 B 对 A 的引用的最佳方法是什么?

那这个呢:

其中类包含彼此的实例。

有没有最佳实践方法来做到这一点?我应该实施任何设计模式吗?我宁愿只使用 System.Reflection.Emit 库,但如果有更好的方法可以做到这一点,或者这不能用它们完成,那么使用其他库是可以接受的。

谢谢

0 投票
2 回答
3717 浏览

c# - Reflection.Emit 的 Java 等价物

据我所知,Java 没有与 C# 类似的Reflection.Emit东西。是否还有其他提供类似功能的 Java 库?有什么区别(反射发射)?

0 投票
1 回答
1195 浏览

c# - 如何在 C# 4.0 中使用 AssemblyBuilder 生成虚拟属性?

我目前正在创建一个具有虚拟属性的程序集。MSDN 上的示例只是创建普通属性。如何在具有虚拟属性的程序集中创建一个类?

我希望能够生成这样的类:

PropertyBuilder 类没有PropertyAttributes.Virtual,所以我不知道如何创建虚拟属性。如果我自己在 Visual Studio 中创建这个类,然后在Reflector中打开它,属性本身是虚拟的,所以是可能的。

怎么做到呢?

0 投票
17 回答
20274 浏览

c# - Reflection.Emit 的真实使用

在我读过的所有关于反思的书中,他们经常说没有多少情况需要即时生成 IL,但他们没有给出任何有意义的例子。

在看到 Reflection.Emit 是一家游戏公司的工作要求后,我很好奇它还有什么用处。

我现在想知道您在现实世界中是否见过任何情况,这是解决问题的最佳方法。也许它被用作设计模式的实现?

注意 我想PostSharp / AOP 使用它。

0 投票
3 回答
2100 浏览

c# - 如何发出 System.Linq.Expression?

我有一些代码可以使用等生成各种委托Func<>。我希望能够将生成的函数序列化为程序集以供以后使用。过去我用 System.Reflection.Emit 做了一些事情,但现在 Linq 表达式我不想再走那条路了。System.Linq.ExpressionsExpression.Lambda<Func<>>.Compile()

Expressions是否有一种机制可以序列化已编译的表达式或从命名空间到命名空间的某种桥梁Emit

编辑

背景的一些背景:我正在研究一个查询引擎(主要是为了我自己的启发和享受)。给定一条 SQL 语句,我想将其解析并转换为 lambda 函数,然后将其序列化到磁盘以供以后(并重复执行)。

在伪代码中,我到了这一点:

(其中fieldfield1field2T 类型的属性,ABT1 类型的属性。我可以传递<T>toquery和 get 的任何枚举,并且它的枚举<T1>与查询条件匹配。

所以我想query作为一个已经编译的程序集序列化到磁盘,以便以后我可以加载它并评估不同的集合,<T>而无需解析和编译它。我正在描绘以下内容:

0 投票
2 回答
2721 浏览

c# - c# Emitting Dynamic Method Delegate to Load Parametrized Constructor Problem

I am trying create a delegate representation of constructor by emitting a Dynamic Method, which has to match this very "loosely-typed" signature so it can be used with any kind of parametrized constructor:

and the code for this creating the delegate looks like (note this is for Silverlight)

Now, I'm getting a "Operation could destabilize the runtime." verification exception, obviously the IL is wrong, so I hoping someone could correct me.

Thanks

0 投票
4 回答
2770 浏览

c# - 使用 Reflection.Emit 将自定义属性复制到另一个方法

我正在尝试基于现有接口生成一组新的 wcf 接口。我正在使用 Reflection.Emit 命名空间来完成此操作。我的问题是如何将旧的自定义属性从一种方法复制到新方法。我看到的每个 SetCustomAttributes() 示例都需要事先知道属性类型。我需要在运行时发现属性类型。有什么想法吗?

0 投票
3 回答
14783 浏览

c# - Reflection.Emit 与 CodeDOM

使用 Reflection.Emit 库与 CodeDOM 在运行时动态生成代码有哪些优点/缺点?

我正在尝试根据运行时以 XML 形式提供的元数据在系统中生成一些(相对复杂的)动态类。我将生成扩展应用程序集中现有类的类,实现额外的接口,添加方法,并覆盖虚拟和抽象成员。

我想确保在深入实施之前选择合适的技术。有关这些不同代码生成技术有何不同的任何信息都会有所帮助。此外,任何有关简化或简化使用任一 API 的开源库的信息也将很有用。

0 投票
3 回答
795 浏览

c# - 如何向发出时类型未完成的委托发出调用?

我无法向发出时类型未完成的委托发出调用。我会详细说明:我已经声明了以下委托类型:

现在我正在尝试动态(即,使用 TypeBuilder)创建以下类:

*在打开的实例委托上。

这很棘手,因为当我尝试声明类型为 DirectReadAccessor [] 的字段 directReadAccessors 时,或者当我发出再次使用 MyClass 的方法 InitalizeClass 时,MyClass 不存在,但它还不存在(即我正在创造什么)。然而,我已经设法做到了这一切,但现在我在使用 DirectRead 方法时遇到了问题,因为一旦我将委托放在堆栈上,我不知道如何调用它。显然我需要的是以下发射:

其中 invokeMInfo 是 DirectReadAccessor 上的 Invoke 方法,我应该像这样获取它:

同样,问题是 MyClass 和 DirectReadAccessor 都不存在。我有 MyClass 的 TypeBuilder 和未完成的 DirectReadAccessor 类型,我是这样创建的:

但是,如果我尝试在 directReadAccessorType 上调用 GetMethod("Invoke", ....),如上所示,我会收到 NotSupportedException,因为我无法为未完成的类型获取方法 Invoke。我已经通过在最终确定类型后进行相同的调用来测试这个假设:

事实上,在这种情况下我没有得到例外。但是,我需要能够在最终确定类型之前获取 Invoke 方法的 MethodInfo,同时我正在为 InitializeClass 发出代码。

这是一个奇怪的情况:当我需要委托时,我会有委托,但我无法生成调用它的代码。任何人都可以提供任何帮助吗?

非常感谢,很抱歉这篇冗长的帖子。