在 C# 中运行脚本

问题描述 投票:0回答:9

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

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

c# scripting
9个回答
5
投票

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

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

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


2
投票

研究 IronPython 和 IronRuby——它们可以让您轻松地与 C# 进行互操作。


1
投票

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

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


1
投票

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


1
投票

很棒的 C# 脚本语言 - Script.Net


0
投票

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

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


0
投票

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

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


0
投票

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

一点也不难,这篇文章:

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

是非常有用的细节总结。


0
投票

Microsoft 针对 C# 中的 JavaScript 的解决方案之一是 ClearScript, 它使用 Chrom 浏览器的 JavaScript 引擎V8。检查其简短的FAQtorial以获取代码示例。

它具有出色的双向集成 - 迭代器/枚举器、输出参数、可选参数、参数数组、委托、任务/承诺/异步/等待、bigint 等等。

除此之外,我认为最显着的特点是它不依赖于 Rosyln 或动态语言运行时。这可能是好是坏 - 好的是因为可能有很多更少的依赖项(取决于您的项目的目标),坏的因为您需要捆绑本机的、依赖于平台的 V8 dll。

如果没问题,您就可以享受尖端的 JavaScript / ECMAScript。截至 2022 年 2 月,您在 Chrome 或98% ES6 上获得的所有内容,以及多个扩展。显然,速度与 Chrome 一样快,因此您可以充分利用 Google 和 Microsoft 的优势。

© www.soinside.com 2019 - 2024. All rights reserved.