Если я хочу поддерживать скрипты в своем приложении, scriptcs предлагает какие-то особые преимущества перед использованием простой ванильной Roslyn script двигатель?
Хостинг скриптов - преимущества над Roslyn
Ответ 1
К сожалению, пока нет документации по хостингу скриптов, но я постараюсь дать вам краткое резюме.
Хостинг скриптов в вашем приложении предоставляет несколько функций, которые ваниль Roslyn не делает:
Подключаемые двигатели
Хотя скрипты поставляются с двигателями Roslyn и Mono по умолчанию, вы можете легко заменить его другим движком, т.е. F #, LOLcode или даже Brainfuck.
Предварительная обработка
scriptcs будет обрабатывать ваши скрипты и извлекать такие вещи, как ссылки (#r
), и загружать другие скрипты (#load
). Недавно был добавлен пользовательский ILineProcessor
, который позволяет подключиться к конвейеру для пользовательской обработки. Пример процессора может выглядеть следующим образом:
public class GistLineProcessor : DirectiveLineProcessor
{
protected string DirectiveName
{
return "gist";
}
protected override bool ProcessLine(IFileParser parser, FileParserContext context, string line)
{
var gistId = GetDirectiveArgument(line);
var gistContents = DownloadGistContents(gistId);
parser.ParseScript(gistContents, context);
return true;
}
private static string DownloadGistContents(string gistId)
{
// Download gist contents...
}
}
Этот процессор загрузит суть и выполнит его как часть вашего script, т.е. #gist 12345678
.
Интеграция NuGet
scriptcs имеет интеграцию с NuGet. Это означает, что если вы хотите, чтобы скрипты могли использовать пакеты NuGet, просто установите их, и они будут автоматически загружены из папки packages.
Script пакеты
Script Пакеты - это способ сценариев, чтобы удалить шаблонный код. Они могут импортировать пространства имен, ссылаться на сборки и раскрывать функциональность для скриптов через Require<T>()
. См. Превосходное сообщение в блоге Martin Doms о создании скрипта script pack. Полный список доступных пакетов script см. В Script мастер-список пакетов.
РЕПЛ
Как вы, наверное, знаете, scriptcs имеет REPL. Это может быть повторно использовано в вашем собственном приложении для обеспечения интерактивного сеанса сценариев.
Отладка
Используя ванильный механизм Roslyn script, вы не можете легко отлаживать скрипты. scriptcs дает вам возможность отлаживать скрипты с сопоставлением источников с помощью директив #line
, вставленных во время предварительной обработки.
Возможно, я что-то забыл, но это основные моменты для выбора скриптов над ванилью Roslyn. Когда дело доходит до фактического хостинга, у вас есть два варианта:
ScriptCs.Core
Это суперлегкая библиотека, содержащая основные компоненты конвейера скриптов. Однако он не содержит реализаций для IScriptEngine
(движок, который фактически выполняет код) и IInstallationProvider
(компонент, который устанавливает пакеты, то есть NuGet), они живут в ScriptCs.Hosting и ScriptCs.Engine.Roslyn. Если вы используете эту библиотеку, вам нужно будет выполнить всю настройку компонентов самостоятельно, и вам также необходимо предоставить реализацию для механизма и установщика пакетов.
ScriptCs.Hosting
ScriptCs.Hosting - это удобный слой для размещения скриптов в приложении. Он используется внутренне в файле scriptcs.exe и выполняет всю проводку компонентов (через Autofac) для вас. Он содержит реализацию NuGet для установщика пакетов и по умолчанию имеет зависимость от ScriptCs.Engine.Roslyn. Это предпочтительный способ размещения скриптов, поскольку он предоставляет ScriptServicesBuilder
, чтобы легко заменить внутренние службы скриптов. См. scriptcs 'Program.cs, например, использование.
Это может показаться запутанным, поэтому, если у вас есть вопросы, пожалуйста, спросите JabbR, Github или Группа Google.