c#从数据库编译源代码

时间:2010-07-18 18:11:24

标签: c# scripting

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

任何人都可以给我一些想法,如何实现这样的!

欢呼声, 的Gabor

5 个答案:

答案 0 :(得分:3)

在.Net中,您可以使用反射和CodeDOM动态编译代码。但这两种方法都不是非常简单或实用。 Mono也有能力在飞行中解释c#,但我还没有密切关注它。

另一种选择是使用像Boo或IronPython这样的解释型.Net语言作为数据库代码的语言。

无论哪种方式,请确保您对平台的安全性进行长时间的考虑。允许用户执行任意代码始终是一个充满危险的运动。寻找一个简单的eval()方法通常太诱人了,即使存在一个方法, 也不足以满足这种情况。

答案 1 :(得分:1)

尝试单声道(http://www.monoproject.org)。它支持许多脚本语言,包括JavaScript。

答案 2 :(得分:1)

如果您不想使用任何脚本,可以使用CodeDOM或Reflection(请参阅Reflection.Emit)。

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

回答您的技术问题:您不想编写自己的语言和口译员。这对你来说太过分了。因此,选择一些其他语言,比如Python或Lua,并查找允许C程序将代码块执行的文档。当然,脚本需要能够执行某些操作,因此您需要找到如何将程序的对象公开给脚本。此外,如果客户端在更新数据库中的源代码时运行该程序会发生什么?客户应该重启吗?您是要将整个程序作为单行存储在此数据库中,还是要存储单个函数?这会影响您构建更新的方式。

解决您的问题的其他问题:为什么要这样做?将“解释语言”作为系统设计规范的一部分通常不是一个好兆头。真正的要求是这样的:“我经常更新程序,我希望用户始终拥有最新的副本?”如果是这样,还有其他更好的方法(仅提供您的实际方案和要求)。