使用 .Net Standard 生成代码
Code generation with .Net Standard
我有一个 little library,它在很大程度上依赖于 Emitting 类 和方法。
我想将它迁移到 .Net Standard,因为它不使用任何非托管的东西,所以可以很容易地 运行 在任何 OS 上。但是当我 运行 可移植性检查器检查我的解决方案时,它显示我的 Expression
生成器部分一切正常,但它在 Emit
用法上抱怨。
这里是对net452
、netstandard1.6
和netstandard2.0
的分析。
我的问题是是否有一些现代和推荐的方法在运行时生成 类 受 .Net Standard 支持,或者我可以忘记将我的库移植到它?
好吧,我发现如今在 .Net Standard
中我们有表达式树来生成独立的委托和老式的 Emit
(可用于 System.Reflection.Emit
和 System.Reflection.Emit.Lightweight
命名空间)其余的部分。不幸的是,我们失去了前者和后者之间的桥梁(我的意思是 LambdaExpression.CompileToMethod
、)。
所以一般情况下,代码生成能力与完整桌面几乎相同 .Net
直到您不需要在运行时生成类型(例如,即时实现一些接口)。在这种情况下,您必须手动发出 IL。
我有一个 little library,它在很大程度上依赖于 Emitting 类 和方法。
我想将它迁移到 .Net Standard,因为它不使用任何非托管的东西,所以可以很容易地 运行 在任何 OS 上。但是当我 运行 可移植性检查器检查我的解决方案时,它显示我的 Expression
生成器部分一切正常,但它在 Emit
用法上抱怨。
这里是对net452
、netstandard1.6
和netstandard2.0
的分析。
我的问题是是否有一些现代和推荐的方法在运行时生成 类 受 .Net Standard 支持,或者我可以忘记将我的库移植到它?
好吧,我发现如今在 .Net Standard
中我们有表达式树来生成独立的委托和老式的 Emit
(可用于 System.Reflection.Emit
和 System.Reflection.Emit.Lightweight
命名空间)其余的部分。不幸的是,我们失去了前者和后者之间的桥梁(我的意思是 LambdaExpression.CompileToMethod
、
所以一般情况下,代码生成能力与完整桌面几乎相同 .Net
直到您不需要在运行时生成类型(例如,即时实现一些接口)。在这种情况下,您必须手动发出 IL。