Подтвердить что ты не робот

Хостинг скриптов - преимущества над Roslyn

Если я хочу поддерживать скрипты в своем приложении, scriptcs предлагает какие-то особые преимущества перед использованием простой ванильной Roslyn script двигатель?

4b9b3361

Ответ 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.