我想在我的应用程序中运行javascript / Python / Ruby。
我有一个应用程序,可以根据用户的定义自动创建进程。该过程在C#中生成。我想让高级用户在预定义的位置注入脚本。这些脚本应该从C#进程运行。 例如,创建的进程将具有一些活动,并且在中间应该运行脚本,然后该过程继续进行。 是否有从C#运行这些脚本的机制?
答案 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以来,我没有听说太多,但它可能值得一看。
答案 7 :(得分:0)
我最近才做到这一点 - 允许运行时添加C#脚本。
这一点并不难,本文:
http://www.divil.co.uk/net/articles/plugins/scripting.asp
是一个非常有用的细节摘要。