C#解释器(无编译)
有没有现成的C#解释器,即不依赖运行时编译的解释器 我的要求是:C#解释器(无编译),c#,scripting,C#,Scripting,有没有现成的C#解释器,即不依赖运行时编译的解释器 我的要求是: 脚本引擎 必须处理C#语法 必须在中等信任环境下工作 不得使用运行时编译(CodeDomProvider…) 开源(或至少免费供个人和专业人士使用) 如果这还不清楚,我需要类似Jint()的东西,但它允许我编写C#scripts而不是JavaScript脚本 谢谢你的帮助。你看过吗?或 奥列格在上写了一篇很好的介绍,看看这个项目。他们最近演示了听起来像你在追求的东西。PDC2008视频 更新: 仔细看,似乎不可能使用服务来评
- 脚本引擎
- 必须处理C#语法
- 必须在中等信任环境下工作
- 不得使用运行时编译(CodeDomProvider…)
- 开源(或至少免费供个人和专业人士使用)
更新:
仔细看,似乎不可能使用服务来评估脚本。目前它链接到Mono运行时,他们不希望它在中等信任环境中运行。有关更多信息,请参阅 另一种可能性是在项目中包含(源),并使用它生成从文件系统加载的程序集。如果您担心加载所有这些程序集所需的资源,您可能必须将它们加载到单独的AppDomain中。它不能处理精确的C#语法,但是PowerShell与.NET framework的关系非常密切,而且是一个非常成熟的产品,我认为您不明智地忽略它,至少是一个可能的解决方案。微软推出的大多数服务器产品现在都支持PowerShell的脚本接口,包括Microsoft Exchange和Microsoft SQL server。我相信Mono有mint,他们在为给定平台实施JIT之前使用的解释器。虽然官方网站上的文档(例如)说它只是整合jitting虚拟机之前的一个中间状态,但我很确定上次在Linux上编译它时它就在那里。不幸的是,我现在不能很好地检查它,但它可能正朝着您想要的方向。是您想要的吗?可以作为代码段IDE使用。该应用程序非常小且轻量级。它是免费的(比如啤酒),但不是开源的。自动完成需要额外的费用,但不多(19美元)
编辑:在仔细阅读了这篇文章中的评论之后,我认为LINQPad不是你想要的。您需要能够以编程方式动态评估数千个小脚本的东西,对吗?我在工作中用铁红宝石很容易做到这一点。如果您愿意使用DLR语言,这可能更可行。我还用一些代码做了一些类似的工作,这些代码可以计算作为字符串传入的C#lambda表达式,但这是非常有限的。在一个项目中,我希望提供一种通用的方法来指定控制何时必须生成某个字母的条件。在另一个项目中,条件控制着如何将案例分配给队列。在这两种情况下,以下解决方案都非常有效:
如果你的代码片段很少改变,那么我会考虑程序化地将它们封装成一组源,每个源都有唯一的名称,然后在一个镜头中编译它们(或者每隔10分钟作为一个定时进程)。这就是我们要做的,因为它还允许对人员会话进行“版本控制”,以便他们继续使用会话开始时使用的DLL版本,但当每个会话停止使用旧版本时,就会将其删除
如果您的代码片段在一天中有规律地变化,那么我建议您改为使用解释脚本语言,甚至是PHP,并根据您需要的功能混合使用您的语言。CScript和LinqPad等产品都使用CodeDomProvider,因为您必须var interpreter = new Interpreter();
var result = interpreter.Eval("8 / 2 + 2");
var interpreter = new Interpreter()
.SetVariable("service", new ServiceExample());
string expression = "x > 4 ? service.SomeMethod() : service.AnotherMethod()";
Lambda parsedExpression = interpreter.Parse(expression,
new Parameter("x", typeof(int)));
parsedExpression.Invoke(5);