繁体   English   中英

在C#中运行脚本

[英]Running scripts inside C#

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

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

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

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

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

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

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

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

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

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

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

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

你有没有想过Visual Studio for Applications? 自.NET 1.1以来,我没有听说过很多,但它可能值得一看。

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

我最近刚刚完成了这个 - 允许运行时添加C#脚本。

这根本不难,本文:

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

是一个非常有用的细节总结。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM