我知道你可以使用Emit、System.Reflection和手动创建的IL代码来动态创建.NET程序集,如此所示。
但我想知道是否有可能在运行中的应用程序中实时地动态创建和执行C#代码块。感谢任何意见或想法。
编辑: 据我所知,CodeDOM允许将C#代码编译为EXE文件,而不仅仅是将其“执行”。这里有一些背景信息以及为什么(就我所知)这不是最好的选择。我正在创建一个需要执行此类动态创建的代码的应用程序[记录在案-这是为了学术研究,而不是真实世界的应用程序,因此无法避免]。因此,创建/执行数千个动态创建的EXE并不是非常有效的。其次-所有动态代码片段都返回一些难以从单独运行的EXE中读取的数据。如果我漏掉了什么,请告诉我。
至于Jon Skeet指出的DynamicMethod方法,如果有更容易编写代码本身而不是底层IL代码的方法,那么一切都会像魅力一样运作。
但我想知道是否有可能在运行中的应用程序中实时地动态创建和执行C#代码块。感谢任何意见或想法。
编辑: 据我所知,CodeDOM允许将C#代码编译为EXE文件,而不仅仅是将其“执行”。这里有一些背景信息以及为什么(就我所知)这不是最好的选择。我正在创建一个需要执行此类动态创建的代码的应用程序[记录在案-这是为了学术研究,而不是真实世界的应用程序,因此无法避免]。因此,创建/执行数千个动态创建的EXE并不是非常有效的。其次-所有动态代码片段都返回一些难以从单独运行的EXE中读取的数据。如果我漏掉了什么,请告诉我。
至于Jon Skeet指出的DynamicMethod方法,如果有更容易编写代码本身而不是底层IL代码的方法,那么一切都会像魅力一样运作。
换句话说(非常严厉地说),我需要像这样的东西:
string x = "_some c# code here_";
var result = Exec(x);