是否可以在C#中在运行时创建/执行代码?

rex*_*xem 4 .net c# runtime

我知道您可以使用Emit,System.Reflection和手动创建的IL代码动态创建.NET程序集,如下所示.

但我想知道是否有可能在正在运行的应用程序中实时动态创建和执行C#代码块.感谢您的任何意见或建议.

编辑: 据我所知,CodeDOM允许您将C#代码编译为EXE文件,而不是"只是"执行它.这里有一些背景信息以及为什么(据我所知)这对我来说不是最好的选择.我正在创建一个应用程序,必须执行这么多动态创建的代码[用于记录 - 它用于学术研究,而不是真实世界的应用程序,因此无法避免].因此,创建/执行数千个动态创建的EXE并不是非常有效.其次 - 所有动态代码片段都会返回一些难以从单独运行的EXE中读取的数据.如果我遗失了什么,请告诉我.

至于Jon Skeet指出的DynamicMethod方法,如果有一种更简单的方法来编写代码本身而不是低级IL代码,那么一切都会像魅力一样.

换句话说(非常严厉地说)我需要这样的东西:

string x = "_some c# code here_";
var result = Exec(x);
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

绝对 - 这正是我为Snippy所做的,对于深度的C#.您可以在此处下载源代码 - 它使用CSharpCodeProvider.

还有可能构建表达式树,然后将它们编译成委托,使用DynamicMethod,或.NET 4中的DLR ......各种各样的东西.