Загрузка сценария из файла CS и доступ к методам хоста, свойств и т. Д.? - PullRequest
2 голосов
/ 30 марта 2012

Я просто играю с Рослин, но не знаю, как сделать следующее.

Для простоты, скажем, у меня есть хост-программа с таким методом

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

Можно ли тогда иметь файл сценария с именем MyScript.csx, а затем где-нибудь в сценарии есть что-то вроде

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

Затем хост загружает файл и выполняет его.

Если такого рода вещи не могут быть выполнены, существует ли система сценариев / движок на основе c #, которая может это сделать? Это требования

  1. Хост-приложение может загружать скрипт из файла.
  2. Файл сценария написан на c # и может быть написан с использованием VS2010 с синтаксисом и т. Д.
  3. Файл сценария может обращаться к общедоступным методам, свойствам и т. Д.

Ответы [ 2 ]

3 голосов
/ 12 апреля 2012

Я написал Введение в API сценариев Roslyn , которое охватывает большую часть того, что вы спрашиваете. Тип ScriptEngine также имеет метод ExecuteFile, который будет полезен для того, что вы пытаетесь сделать.

Отказ от ответственности: я работаю на Microsoft над проектом Roslyn.

1 голос
/ 30 марта 2012

Да, вы можете делать что хотите, используя 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");
...