CLR的运行时生成编译

时间:2010-09-30 05:11:43

标签: c# clr cil

我有一个C#应用程序,它在运行时生成.NET函数并执行它们。 为此,它在字符串中生成C#并调用在线C#编译器将其转换为CLR以进行JIT编译和执行。

出于性能原因,我希望能够直接生成CLR(在字符串中或通过内部表示)并在不使用任何编译器(但可能是JIT编译器)的情况下执行它。

这可能吗?我已经看过一些关于代码注入的文章,但这并不符合这个要求。

谢谢!

3 个答案:

答案 0 :(得分:4)

我怀疑System.Reflection.Emit就是你所追求的。特别是,如果您只想生成一个方法,我相信您应该查看DynamicMethod。您可以向create an ILGenerator询问它,构建IL,然后在将方法转换为委托时进行JIT编译。

我不相信你可以只给它文本IL ...你将使用API​​,明确地构建各种指令。虽然可能有一个IL解析器使用它...

答案 1 :(得分:2)

如果您只想创建.Net功能,Expression trees是可行的方法。如果你想创建一个完整的类,你可以使用Reflection.Emit,但是你正在编写汇编代码。

如果您等待.Net 5,也许他们会有一个可以传递任意C#代码的编译器版本,但是现在也许您可以使用使用DLR的东西(如IronPython)来传递实际的源代码到。

答案 2 :(得分:0)

我可能不理解这个问题,但你不能从你的应用程序生成C#代码,而不是生成C#编译器会生成的等效中间语言(IL)代码吗?然后你可以直接运行IL代码而无需先编译它。