使用.Net Standard生成代码

时间:2016-12-30 14:35:07

标签: c# .net .net-core .net-standard

我有一个little library,它非常依赖于发射类和方法。

我想将它迁移到.Net Standard,因为它没有使用任何非托管的东西,因此可以在任何操作系统上轻松运行。但是当我在我的解决方案上运行可移植性检查程序时,它显示我的Expression生成器部分的一切正常,但它在Emit用法上抱怨。

以下是net452netstandard1.6netstandard2.0的分析。

enter image description here

我的问题是,是否有一些现代的和推荐的方法来在.Net Standard支持的运行时生成类,或者我可以忘记将我的库移植到它?

1 个答案:

答案 0 :(得分:1)

好吧,我发现现在.Net Standard我们有表达式树来生成独立委托和旧式Emit(可用System.Reflection.EmitSystem.Reflection.Emit.Lightweight名称空间) 。不幸的是,我们在前者和后者之间失去了桥梁(我的意思是LambdaExpression.CompileToMethodsee question)。

因此,在完全桌面.Net之前几乎具有相同的代码生成能力,直到您不需要在运行时生成类型(例如,实时实现某些接口)。在这种情况下,您必须手动发出IL。