c# scripting csi

c# - Cómo usar el argumento de script CSI.exe



scripting (2)

Cuando ejecuta csi.exe /? (con la actualización 2 de Visual Studio 2015 instalada), obtendrá la siguiente sintaxis

Microsoft (R) Visual C# Interactive Compiler version 1.2.0.51106 Copyright (C) Microsoft Corporation. All rights reserved. Usage: csi [option] ... [script-file.csx] [script-argument] ...

Me pregunto cómo puedo pasar este [ script-argument ] en mi archivo de script csx. Digamos que mi script csx (c: / temp / a.csx) tiene solo 2 líneas de la siguiente manera

using System; Console.WriteLine("Hello {0} !", <argument_from_commandLine>);

Lo que espero es después de ejecutar la siguiente línea de comando

csi.exe c:/temp/a.csx David

Conseguiré

Hello David !

Pero simplemente no sé qué debería hacer en mi archivo de script para poder pasar csi.exe [ script_argument ] a mi archivo de script (para reemplazar).

Gracias de antemano por su tiempo y ayuda.


Puede usar Environment.GetCommandLineArgs() para eso.

Ejemplo para tu ejemplo:

using System; Console.WriteLine("Hello {0}!", Environment.GetCommandLineArgs()[2]);

Observe que estoy leyendo el tercer elemento, porque Environment.GetCommandLineArgs() da la línea de comando completa (si ejecuta el script usando csi test.csx David , el primero será csi y el segundo test.csx )


Hay una variable global en las secuencias de comandos llamada Args que tiene estos valores de "argumento de secuencia de comandos". Lo más cercano que puedo encontrar a la documentación es mencionarlo en las solicitudes de extracción para el repo roslyn . En un archivo csx (test.csx):

using System; Console.WriteLine("Hello {0}!", Args[0]);

usando la línea de comando:

csi.exe test.csx arg1

dará la salida:

Hola arg1!

Se podría hacer que un enfoque alternativo usando Environment.GetCommandLineArgs() funcione, pero el problema es que esto recoge todos los argumentos pasados ​​al proceso csi. Luego debe separar los "argumentos del script" de las opciones para csi. Este trabajo se puede evitar utilizando la variable Args incorporada, que también será más fácil de mantener.