在C#中运行脚本

时间:2008-09-23 07:42:23

标签: c# scripting

我想在我的应用程序中运行javascript / Python / Ruby。

我有一个应用程序,可以根据用户的定义自动创建进程。该过程在C#中生成。我想让高级用户在预定义的位置注入脚本。这些脚本应该从C#进程运行。 例如,创建的进程将具有一些活动,并且在中间应该运行脚本,然后该过程继续进行。 是否有从C#运行这些脚本的机制?

8 个答案:

答案 0 :(得分:5)

基本上,你有两个问题:如何在生成的代码中定义注入点,以及如何从那里运行python / ruby​​ / whatev脚本。

根据您生成过程的方式,一种可能的解决方案是为每个可能的注入点添加一个函数。该函数将检查用户是否已将任何脚本与给定点相关联,如果是,则通过调用IronPython / IronRuby(使用可选的给定参数)来运行脚本。

缺点包括:从脚本到创建过程的可访问性有限(基本上,只能访问作为参数传递的变量);以及实现限制(IronPython的当前版本省略了几个基本的系统功能)。

答案 1 :(得分:2)

了解IronPython和IronRuby - 这些将使您可以轻松地与C#进行互操作。

答案 2 :(得分:1)

您可以使用 CSharpCodeProvider 类在C#应用程序中编译C#代码。

如果编译成功,您可以运行通过 CompilerResults 类的 CompiledAssembly 属性返回的结果程序集。

答案 3 :(得分:1)

令人敬畏的C#脚本语言 - Script.Net

答案 4 :(得分:1)

.NET有一种脚本语言,包括PowerShell中的运行时引擎,可以嵌入到任何.NET应用程序中。

答案 5 :(得分:0)

您可以将C#代码“动态”编译到内存中的程序集中。我认为这也可以通过IronPython和IronRuby实现。查看CodeDomProvider.CreateProvider方法。

如果您需要经常运行脚本,或者您的进程运行了很长时间,您可能希望将这些程序集加载到另一个AppDomain中。完成脚本后卸载AppDomain。否则您无法从内存中删除它们。这会对项目中的其他类产生一些影响,因为您必须对所有调用进行编组。

答案 6 :(得分:0)

您是否考虑过Visual Studio for Applications?自.NET 1.1以来,我没有听说太多,但它可能值得一看。

http://msdn.microsoft.com/en-us/library/ms974548.aspx

答案 7 :(得分:0)

我最近才做到这一点 - 允许运行时添加C#脚本。

这一点并不难,本文:

http://www.divil.co.uk/net/articles/plugins/scripting.asp

是一个非常有用的细节摘要。