从cs文件加载脚本并访问主机方法,属性等?
我只是和罗斯林玩,但不确定如何做以下事情。
为了保持这个简单,让我说我有一个主机程序,它有一个像这样的方法
public void DisplayMessage(string message) { MessageBox.Show(message); }
然后,我可以有一个名为MyScript.csx的脚本文件,然后在脚本中的某个地方有类似的东西
void Main() { Host.DisplayMessage("I am a script"); }
然后我让主机加载文件并执行它。
如果不能做这种事情,是否有基于c#的脚本系统/引擎可以做到这一点? 这些是要求
- 主机应用程序可以从文件加载脚本。
- 脚本文件是用c#编写的,因此可以使用带语法等的VS2010编写
- 脚本文件可以访问主机公共方法,属性等
是的,你可以使用Roslyn做你想做的事。
首先,创建一个具有公共DisplayMessage
方法(或使用现有类)的公共Host
类。 然后创建ScriptEngine
,指定包含Host
作为参考的程序集。 之后,您可以在文件上调用ExecuteFile()
,并将Host
对象作为另一个参数:
var engine = new ScriptEngine(references: new[] { typeof(Host).Assembly }); engine.ExecuteFile("MyScript.csx", new Host());
脚本文件不需要任何Main()
方法,您可以直接在主机对象上调用该方法:
DisplayMessage("I am a script");
我写了一篇罗斯林脚本API简介 ,涵盖了你所提出的大部分内容。 ScriptEngine
类型还有一个ExecuteFile
方法,对于您尝试执行的操作非常有用。
免责声明:我在Roslyn项目上为Microsoft工作。