2

我只是和 Roslyn 一起玩,但不确定如何执行以下操作。

为了简单起见,假设我有一个主机程序,它有这样的方法

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

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

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

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

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

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

2 回答 2

3

我写了一篇介绍 Roslyn 脚本 API的文章,其中涵盖了您所询问的大部分内容。该ScriptEngine类型还具有一种ExecuteFile对您尝试执行的操作很有用的方法。

免责声明:我在 Microsoft 的 Roslyn 项目上工作。

于 2012-04-11T21:20:55.780 回答
1

是的,您可以使用 Roslyn 做您想做的事。

首先,创建一个Host具有公共DisplayMessage方法的公共类(或使用现有类)。然后创建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");
于 2012-03-30T19:18:59.727 回答