【发布时间】:2011-08-08 18:40:45
【问题描述】:
但我想知道是否可以在正在运行的应用程序中实时动态创建和执行 C# 代码块。感谢您提供任何意见或想法。
编辑: 据我了解,CodeDOM 允许您将 C# 代码编译成 EXE 文件,而不是“仅仅”执行它。这是一些背景信息以及为什么(据我所知)这对我来说不是最佳选择。我正在创建一个应用程序,该应用程序必须大量执行这种动态创建的代码[记录在案-它是用于学术研究,而不是实际应用程序,因此这是无法避免的]。因此,创建/执行数千个动态创建的 EXE 并不是很有效。其次 - 所有动态代码片段都会返回一些难以从单独运行的 EXE 中读取的数据。如果我遗漏了什么,请告诉我。
至于由 Jon Skeet 指出的 DynamicMethod 方法,如果有一种更简单的方法来编写代码本身而不是低级 IL 代码,那么一切都会像魅力一样工作。
换句话说(非常严厉地说)我需要这样的东西:
string x = "_some c# code here_";
var result = Exec(x);
【问题讨论】:
-
定义“实时”。 .NET 不是一个实时平台,因为您无法控制线程何时会因其他任务(包括垃圾收集)而被中断。
-
是的 - 见here。
-
@Eric J:对不起,我可能误用了“实时”这个词。我的意思是 C# 代码应该在应用程序运行时动态生成,而不是在编译之前静态实现。 (例如,应该执行的 c# 代码是从文本流中动态读取的)