我有一个little library,它非常依赖于发射类和方法。
我想将它迁移到.Net Standard,因为它没有使用任何非托管的东西,因此可以在任何操作系统上轻松运行。但是当我在我的解决方案上运行可移植性检查程序时,它显示我的Expression
生成器部分的一切正常,但它在Emit
用法上抱怨。
以下是net452
,netstandard1.6
和netstandard2.0
的分析。
我的问题是,是否有一些现代的和推荐的方法来在.Net Standard支持的运行时生成类,或者我可以忘记将我的库移植到它?
答案 0 :(得分:1)
好吧,我发现现在.Net Standard
我们有表达式树来生成独立委托和旧式Emit
(可用System.Reflection.Emit
和System.Reflection.Emit.Lightweight
名称空间) 。不幸的是,我们在前者和后者之间失去了桥梁(我的意思是LambdaExpression.CompileToMethod
,see question)。
因此,在完全桌面.Net
之前几乎具有相同的代码生成能力,直到您不需要在运行时生成类型(例如,实时实现某些接口)。在这种情况下,您必须手动发出IL。