从cs文件加载脚本并访问主机方法,属性等?

我只是和罗斯林玩,但不确定如何做以下事情。

为了保持这个简单,让我说我有一个主机程序,它有一个像这样的方法

public void DisplayMessage(string message) { MessageBox.Show(message); } 

然后,我可以有一个名为MyScript.csx的脚本文件,然后在脚本中的某个地方有类似的东西

 void Main() { Host.DisplayMessage("I am a script"); } 

然后我让主机加载文件并执行它。

如果不能做这种事情,是否有基于c#的脚本系统/引擎可以做到这一点? 这些是要求

  1. 主机应用程序可以从文件加载脚本。
  2. 脚本文件是用c#编写的,因此可以使用带语法等的VS2010编写
  3. 脚本文件可以访问主机公共方法,属性等

是的,你可以使用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工作。