使用反射从字符串生成动态代码.发射



我在数据库表中存储了一些C#代码。

我把基类的全部代码放在一个字符串中。

有了存储的C#代码,我向类中添加了一个名为m1的方法,该方法包含一个return <<some C# code>>;(该方法总是返回object,因此C#代码可以是:88 + 90"hello world"this.ToString()等),将其保存到一个文件中,并使用CSharpCodeProvider进行编译,然后在我的程序中运行它。

存储的C#代码可以使用基类中的一些方法。

这个方案效果很好。

现在,我将使用Reflection.Emit来完成此操作,以避免编译步骤。

这可能吗?如果可能的话,该怎么做?

现在,我想使用Reflection.Emit来完成这项工作,以避免编译步骤。

这对我来说没有多大意义。如果你有想要执行的源代码,你基本上有两个选项:

  1. 将其编译为其他可以直接执行的形式。(像C这样的经典编译语言是这样工作的。)
  2. 把它解析成内存中的一些结构,然后一块一块地执行。(经典的解释语言是这样工作的,就像旧浏览器中的JavaScript一样。)

由于虚拟机和中间语言等原因,现在的事情实际上并没有那么简单,但这些都是基本的选择。

如果你不想使用CodeDOM,那就有两个选择(对应于上面的两个选项):

  1. 分析代码,然后从中创建一些可执行表单,可能使用Reflection.Emit
  2. 解析代码并直接执行结果。你不需要Reflection.Emit

选择1意味着您需要实现完整的C#编译器。选择2意味着您需要实现一半的C#编译器,再加上内存结构的解释器。在这两种情况下,这都是一个巨大的项目,你不会真正"避免编译步骤"。

相关内容

  • 没有找到相关文章

最新更新