c#从数据库编译源代码

c#从数据库编译源代码,c#,scripting,C#,Scripting,我想构建一个主要是解释的应用程序框架。 假设源代码将存储在用户可以编辑的数据库中,并始终执行最新版本 谁能给我一些想法,一个人如何实现这样的事情 干杯, gabor试试单声道()。它支持多种脚本语言,包括JavaScript。通常,该程序对可编写脚本的部分使用脚本语言,即Lua或JavaScript。在.Net中,您可以使用反射和CodeDOM动态编译代码。但这两种方法都不是很简单或实用。Mono也有一些即时解释c#的能力,但我还没有仔细研究过 另一种选择是使用解释的.Net语言(如Boo或Ir

我想构建一个主要是解释的应用程序框架。 假设源代码将存储在用户可以编辑的数据库中,并始终执行最新版本

谁能给我一些想法,一个人如何实现这样的事情

干杯,
gabor

试试单声道()。它支持多种脚本语言,包括JavaScript。

通常,该程序对可编写脚本的部分使用脚本语言,即Lua或JavaScript。

在.Net中,您可以使用反射和CodeDOM动态编译代码。但这两种方法都不是很简单或实用。Mono也有一些即时解释c#的能力,但我还没有仔细研究过

另一种选择是使用解释的.Net语言(如Boo或IronPython)作为数据库代码的语言


无论哪种方式,都要确保对平台的安全性进行长期而认真的思考。允许用户执行任意代码始终是一项充满危险的工作。寻找一个简单的
eval()
方法往往太诱人了,即使存在,也不足以满足这种情况。

回答您的技术问题:您不想编写自己的语言和解释器。那对你来说太多的工作了。因此,选择一些其他语言,比如Python或Lua,并寻找可以让您的C程序将代码块交给它执行的文档。当然,脚本需要能够做一些事情,因此您需要找到如何向脚本公开程序的对象。另外,当您更新数据库中的源代码时,如果客户机正在运行该程序,会发生什么情况?客户端应该重新启动吗?您是要将整个程序作为一行存储在此数据库中,还是要存储单个函数?这会影响您如何组织更新


用你的问题来解决其他问题:你为什么要这样做?将“解释语言”作为系统设计规范的一部分通常不是一个好迹象。真正的需求是这样的:“我经常更新程序,我希望用户总是拥有最新的副本?”如果是这样,还有其他更好的方法(只需给出您的实际场景和需求)。

如果您不想使用任何可以使用的脚本或反射(请参阅Reflection.Emit)

以下是有关该主题的非常有用的链接:

  • (在这里你可以找到一个非常有用的工具)