使用 .Net Standard 生成代码

Code generation with .Net Standard

我有一个 little library,它在很大程度上依赖于 Emitting 类 和方法。

我想将它迁移到 .Net Standard,因为它不使用任何非托管的东西,所以可以很容易地 运行 在任何 OS 上。但是当我 运行 可移植性检查器检查我的解决方案时,它显示我的 Expression 生成器部分一切正常,但它在 Emit 用法上抱怨。

这里是对net452netstandard1.6netstandard2.0的分析。

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

好吧,我发现如今在 .Net Standard 中我们有表达式树来生成独立的委托和老式的 Emit(可用于 System.Reflection.EmitSystem.Reflection.Emit.Lightweight 命名空间)其余的部分。不幸的是,我们失去了前者和后者之间的桥梁(我的意思是 LambdaExpression.CompileToMethod)。

所以一般情况下,代码生成能力与完整桌面几乎相同 .Net 直到您不需要在运行时生成类型(例如,即时实现一些接口)。在这种情况下,您必须手动发出 IL。