ventajas pago desventajas roslyn scriptcs

pago - Alojamiento de scripcs-Ventajas sobre Roslyn



ventajas y desventajas de godaddy (1)

Si quiero admitir los scripts en mi aplicación, ¿los scriptcs ofrecen alguna ventaja en particular con el simple uso del motor de scripts de Roslyn ?


Lamentablemente, aún no hay mucha documentación sobre cómo alojar scriptcs, pero intentaré darles un breve resumen.

El alojamiento de secuencias de comandos en su aplicación proporciona varias características que la vainilla Roslyn no:

Motores conectables

Mientras que las secuencias de comandos vienen con los motores Roslyn y Mono de manera predeterminada, puede reemplazarlo fácilmente con otro motor, es decir, F# , LOLcode o incluso Brainfuck .

Pre-procesamiento

scriptcs procesará sus scripts y extraerá cosas como referencias ( #r ) y cargará otros scripts ( #load ). También se introdujo recientemente el ILineProcessor personalizado que le permite conectarse a la tubería para el procesamiento personalizado. Un procesador de ejemplo podría verse así:

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... } }

Este procesador descargará un gist y lo ejecutará como parte de su script, es decir, #gist 12345678 .

Integración de NuGet

scriptcs tiene integración con NuGet. Esto significa que si desea que los scripts puedan usar los paquetes de NuGet, simplemente instálelos y se cargarán automáticamente desde la carpeta de paquetes .

Paquetes de guiones

Los paquetes de scripts son la forma de scriptcs de eliminar el código de plantilla. Pueden importar espacios de nombres, ensamblar referencias y exponer la funcionalidad a scripts a través de Require<T>() . Vea la excelente publicación del blog de Martin Doms sobre la construcción de un paquete de script de scriptcs . Para obtener una lista completa de los paquetes de scripts disponibles, consulte la lista maestra de paquetes de scripts .

REPL

Como usted probablemente sabe, scriptcs tiene un REPL . Esto se puede reutilizar en su propia aplicación para proporcionar una sesión de secuencias de comandos interactiva.

Depuración

Al usar el motor de secuencias de comandos de Roslyn, no puede depurar las secuencias de comandos muy fácilmente. scriptcs le ofrece la posibilidad de depurar scripts con la asignación de origen a través de directivas #line insertadas durante el preprocesamiento.

Puede que haya olvidado algo, pero estos son los puntos principales para elegir guiones sobre Vanilla Roslyn. Cuando se trata del alojamiento real , tienes dos opciones:

ScriptCs.Core

Esta es una biblioteca súper liviana que contiene los componentes centrales de la tubería de scripcs. Sin embargo, no contiene implementaciones para IScriptEngine (el motor que realmente ejecuta el código) y IInstallationProvider (el componente que instala los paquetes, es decir, NuGet), estos se encuentran en ScriptCs.Hosting y ScriptCs.Engine.Roslyn . Si utiliza esta biblioteca, tendrá que hacer todo el cableado de los componentes y también deberá proporcionar una implementación para el motor y el instalador de paquetes.

ScriptCs.Hosting

ScriptCs.Hosting es una capa de conveniencia para hospedar scripcs en una aplicación. Se usa internamente en scriptcs.exe y hace todo el cableado de los componentes (a través de Autofac ) por usted. Contiene la implementación de NuGet para el instalador de paquetes y tiene una dependencia de ScriptCs.Engine.Roslyn de forma predeterminada. Esta es la forma preferida de hospedar scriptcs, ya que proporciona un ScriptServicesBuilder para reemplazar fácilmente los servicios internos de scriptcs. Ver scriptcs ''Program.cs para el ejemplo de uso.

Esto puede JabbR confuso, por lo que si tiene JabbR pregunta, pregunte en JabbR , Github o en el Grupo de Google .